加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

在Matlab中,如何实现xticklabel的旋转?

(2010-08-14 22:37:45)
标签:

杂谈

分类: matlab
 
 
在撰写科技论文时,不可避免的要使用图片显示试验结果。excel固然可以用来画图,但是excel画出来的图片不够精美,漂亮。Matlab是一个很强大的工具(我对其他功能知之甚少),可以画出很精美的图片,并且可以直接存储为.eps格式,方便在LaTex中调用。

    我在使用Matlab是遇到了一个问题,就是由于xticklabel的字符串过长,导致多个ticklabel重叠。

    首先,为初学者解释一下什么是ticklabel?什么是label?

http://hiphotos.baidu.com/xuelicheng/abpic/item/7721b3f0c0b524e07831aa72.jpg

    一般情况下,label是可以通过属性设置其旋转的,但是,这并不是我们要旋转的东西,我们想旋转的是ticklabel,而ticklabel在axis属性对话框中通过设置style只能设置FontSize和FontWeight等属性,并不能旋转。

    我通过一个函数实现ticklabel的旋转

function th=rotateticklabel(h,rot,demo)
%ROTATETICKLABEL rotates tick labels
  TH=ROTATETICKLABEL(H,ROT) ris the calling form where H is a handle to
  the axis that contains the XTickLabels that are to be rotated. ROT is
  an optional parameter that specifies the angle of rotation. The default
  angle is 90. TH is a handle to the text objects created. For long
  strings such as those produced by datetick, you may have to adjust the
  position of the axes so the labels don't get cut off.
%
  Of course, GCA can be substituted for H if desired.
%
  TH=ROTATETICKLABEL([],[],'demo') shows a demo figure.
%
  Known deficiencies: if tick labels are raised to a power, the power
  will be lost after rotation.
%
  See also datetick.

  Written Oct 14, 2005 by Andy Bliss
  Copyright 2005 by Andy Bliss

%DEMO:

if nargin==3
    x=[now-.7 now-.3 now];
    y=[20 35 15];
    figure
    plot(x,y,'.-')
    datetick('x',0,'keepticks')
    h=gca;
    set(h,'position',[0.13 0.35 0.775 0.55])
    rot=90;
end

%set the default rotation if user doesn't specify
if nargin==1
    rot=90;
end
%make sure the rotation is in the range 0:360 (brute force method)
% while rot>360
    rot=rot-360;
% end
% while rot<0
    rot=rot+360;
% end
%get current tick labels
a=get(h,'XTickLabel');
%erase current tick labels from figure
set(h,'XTickLabel',[]);
%get tick label positions
b=get(h,'XTick');
c=get(h,'YTick');
%make new tick labels
if rot<180
    th=text(b,repmat(c(1)-.1*(c(2)-c(1)),length(b),1),a,'HorizontalAlignment','right','fontsize',14,'fontweight','bold','rotation',rot);
else
    th=text(b,repmat(c(1)-.1*(c(2)-c(1)),length(b),1),a,'HorizontalAlignment','left','fontsize',14,'fontweight','bold','rotation',rot);
end

如何使用这个函数呢?

x = round(rand(5,3)*10);
h=bar(x,1,'group');
set(gca,'xticklabels',{'benchmark1','benchmark2','benchmark3','benchmark4','benchmark5'});
h = gca;
th=rotateticklabel(h, 45);

效果

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有