全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件
36077 151
2013-08-30
利用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


二维码

扫码加我 拉你入群

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

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

全部回复
2013-8-30 10:26:47
mark
二维码

扫码加我 拉你入群

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

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

2013-8-30 10:28:39
提示: 作者被禁止或删除 内容自动屏蔽
二维码

扫码加我 拉你入群

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

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

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

https://bbs.pinggu.org/thread-2585741-1-1.html
二维码

扫码加我 拉你入群

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

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

2013-8-30 10:30:08
楼主怎么设置可以输入中文,我的英文版本输入中文总是出现方框呢?谢谢!
二维码

扫码加我 拉你入群

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

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

2013-8-30 11:35:45
学习一下
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群