转自:http://hi.baidu.com/xuelicheng/blog/item/c0e147545eb565173a2935b7.html
在撰写科技论文时,不可避免的要使用图片显示试验结果。excel固然可以用来画图,但是excel画出来的图片不够精美,漂亮。Matlab是一个很强
大的工具(我对其他功能知之甚少),可以画出很精美的图片,并且可以直接存储为.eps格式,方便在LaTex中调用。
我在使用Matlab是遇到了一个问题,就是由于xticklabel的字符串过长,导致多个ticklabel重叠。
首先,为初学者解释一下什么是ticklabel?什么是label?
一般情况下,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
�MO:
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);
效果图略