楼主: AUGUST麦芽糖
32634 151

MATLAB小技巧之二:旋转MATLAB坐标轴刻度标签   [推广有奖]

学术权威

10%

还不是VIP/贵宾

-

威望
3
论坛币
27091900 个
通用积分
28.0631
学术水平
568 点
热心指数
493 点
信用等级
508 点
经验
159523 点
帖子
1019
精华
24
在线时间
4695 小时
注册时间
2009-7-22
最后登录
2023-4-26

初级学术勋章

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
利用matlab绘制图形的时候,会遇到坐标轴刻度标签过于拥挤的情况,此时需要将坐标轴刻度标签旋转一个角度,从而在一定程度上消除拥挤状况。本帖中的程序(自编函数rotateticklabel)就是用来实现这个功能(旋转坐标轴刻度标签)的。下面给出例子和源代码。

如果你还没有学习过MATLAB或者想系统的学习,建议参加我们的初中级实用现场培训。王小川主讲,送全部视频,三天可以学会你一年学的知识。点击了解。

【例】绘制一个周期上的正弦函数图形,将X轴刻度标签修改并旋转。
修改X轴刻度标签的matlab代码:

x = 0:0.05:2*pi;
y = sin(x);
plot(x,y);
str = '这里是0|这里是1|这里是2|这里是3|这里是4|这里是5|这里是6|这里是7';
set(gca,'xtick',0:7,'xticklabel',str);


绘制图形如下,显然X轴刻度标签是比较拥挤的:
  
调用自编函数旋转X轴刻度标签的matlab代码:

rotateticklabel(gca,'x',-30);

旋转后图形如下,拥挤状况得到解决:
  

自编的rotateticklabel 函数代码如下:

function TextHandle = rotateticklabel(ha,tag,rot)

%   旋转坐标轴刻度标签的函数
%   ha   坐标系句柄(默认为当前坐标系)
%   tag  坐标轴标识字符串('X'或'Y'),默认旋转X轴标签
%   rot  旋转角度(单位:度)
%
%   Example:
%   x = 0:0.05:2*pi;
%   y = sin(x);
%   plot(x,y);
%   rotateticklabel(gca,'x',-30);
%
%   CopyRight:xiezhh(谢中华),2011.10

if ~ishandle(ha)
    warning('第一个输入参数应为坐标系句柄');
    return;
end

if ~strcmpi(get(ha,'type'),'axes')
    warning('第一个输入参数应为坐标系句柄');
    return;
end

if nargin == 1
    tag = 'X';
    rot = 0;
elseif nargin == 2
    if isnumeric(tag) && isscalar(tag)
        rot = tag;
        tag = 'X';
    elseif ischar(tag) && (strncmpi(tag,'x',1) || strncmpi(tag,'y',1))
        rot = 0;
    else
        warning('输入参数类型错误');
        return;
    end
else
    if ~isnumeric(rot) || ~isscalar(rot)
        warning('输入参数类型错误');
    end
    if ~ischar(tag) || (~strncmpi(tag,'x',1) && ~strncmpi(tag,'y',1))
        warning('输入参数类型错误');
    end
end

axes(ha);
oldxticklabel = findobj(ha,'type','text','tag','oldxticklabel');
oldyticklabel = findobj(ha,'type','text','tag','oldyticklabel');
if strncmpi(tag,'x',1)
    if isempty(oldxticklabel)
        str = get(ha,'XTickLabel');
        x = get(ha,'XTick');
        yl = ylim(ha);
        set(ha,'XTickLabel',[]);
        y = zeros(size(x)) + yl(1) - range(yl)/30;
        TextHandle = text(x,y,str,'rotation',rot,...
            'Interpreter','none','tag','oldxticklabel');
    else
        set(oldxticklabel,'rotation',rot);
        TextHandle = oldxticklabel;
    end
else
    if isempty(oldyticklabel)
        str = get(ha,'YTickLabel');
        y = get(ha,'YTick');
        xl = xlim(ha);
        set(ha,'YTickLabel',[]);
        x = zeros(size(y)) + xl(1) - range(xl)/10;
        TextHandle = text(x,y,str,'rotation',rot,...
            'Interpreter','none','tag','oldyticklabel');
    else
        set(oldyticklabel,'rotation',rot);
        TextHandle = oldyticklabel;
    end
end

rot = mod(rot,360);
if rot>=0 && rot<180
   set(TextHandle,'HorizontalAlignment','right');
else
   set(TextHandle,'HorizontalAlignment','left');
end





Matlab初中级实战培训

    时间  地点费用报名
101-3北京,人民大学3000元(学生1800点此报名   
10月25日-27日广州,中山大学3000元(学生1800点此报名   


咨询联系方式

QQ号:619492407

电话: (010)68472925(曾老师)

邮箱: training@pinggu.org


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB atlab matla Lab Mat 小技巧 坐标轴 标签

已有 4 人评分经验 学术水平 热心指数 信用等级 收起 理由
liujianfang + 100 精彩帖子
8848sovereign + 1 + 1 + 1 鼓励积极发帖讨论
aaa110518 + 1 + 1 + 1 精彩帖子
richardgu26 + 1 + 1 + 1 热心帮助其他会员

总评分: 经验 + 100  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

沙发
dash731 发表于 2013-8-30 10:26:47 |只看作者 |坛友微信交流群

回帖奖励 +2

mark

使用道具

藤椅
xinchuzu 发表于 2013-8-30 10:28:39 |只看作者 |坛友微信交流群

回帖奖励 +2

提示: 作者被禁止或删除 内容自动屏蔽

使用道具

板凳
reduce_fat 发表于 2013-8-30 10:29:18 |只看作者 |坛友微信交流群

回帖奖励 +2

xinchuzu 发表于 2013-8-30 10:28
Thanks.
原创英文论文和院校申请经验精华汇总(持续更新中)

https://bbs.pinggu.org/thread-2585741-1-1.html
复制粘贴积分链接 https://bbs.pinggu.org/ext8_airdrop.php?airdropfrom^^uid=2669999

使用道具

报纸
richardgu26 发表于 2013-8-30 10:30:08 |只看作者 |坛友微信交流群

回帖奖励 +2

楼主怎么设置可以输入中文,我的英文版本输入中文总是出现方框呢?谢谢!

使用道具

地板
晏几道 发表于 2013-8-30 11:35:45 |只看作者 |坛友微信交流群

回帖奖励 +2

学习一下
唯一要关心的事情,就是读书和思考。

使用道具

7
资料狂人 在职认证  发表于 2013-8-30 11:47:53 |只看作者 |坛友微信交流群

回帖奖励 +2



使用道具

8
charles2011 发表于 2013-8-30 11:54:51 |只看作者 |坛友微信交流群

回帖奖励 +2

支持!

使用道具

9
AUGUST麦芽糖 在职认证  发表于 2013-8-30 11:57:53 |只看作者 |坛友微信交流群
richardgu26 发表于 2013-8-30 10:30
楼主怎么设置可以输入中文,我的英文版本输入中文总是出现方框呢?谢谢!
preference里设置font,选择可以显示中文的字体就好。

使用道具

10
book992008 在职认证  发表于 2013-8-30 12:10:59 |只看作者 |坛友微信交流群

回帖奖励 +2

不错学习了
book992008

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 15:21