ROTATETICKLABEL rotates tick labels. Any arbitrary rotation is acceptable. A demo is included. Right now it only can rotate XTickLabels but it would be easy to modify to rotate YTickLabels.
TH=ROTATETICKLABEL(H,ROT) is 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.
It worked, but not when I was using ticks which I had set. The plot I was trying has 21 points, but I only wanted to label every third point [125, 250 500 1000 2000 4000 8000]. The labels that I had used earlier were used, but the other ticks were also labeled
125, 2 3 250 5 6 500 8 9 and so on. So a work around will need to be found. Thank you for the posting.
I have this error when I tried to run the program : rotateticklabel(gca,45);
??? Undefined function or method 'rotateticklabel' for input arguments of type 'double'.
please there is someone who can help to correct this error?? Thanks !
Because my graph had too many horizontal categories, Matlab automatically changes the axis step to a value different than 1. In this case, this code doesn't work.
I had to include after the line 46 the following command to make it work
[x y]=size(a);ticks=1; for j=2:x, ticks=horzcat(ticks,j); end, set(h,'XTick',ticks);
Thanks Andrew, this is extremely helpful. It seems to have a little issue when using subplot and applying rotation to all axes. (e.g. subplot(3,2,x) and then applying roration to each of the subplots - for some plots the text just disappears. R2010b)
So far so good - does exactly what it says on the tin.
I have not tried _all_ the odd combinations and uses, but then if you use Matlab in-depth and manage to crash it, you should be able to help the developer. Why complain? Just make it better instead.
Also, the Author says the procedure rotates X axis labels then why complain that it does not do Y axis? Someone helps you by publishing their work ... OK, I feel a rant coming so I'll finish now.
The placement of XTickLabels is very messy if Y ticks are irregularly spaced or do not start at YMin, so instead of placing ticklabels at c(1)-0.1... change it to ymin(1)-0.1... where ymin=get(h,'YLim')
It was very helpful code for plot with dates.
simple example
y=(1:4);
x=(1:4);
figure(1)
plot(y,x)
set(gca,'XTick',1:4)
set(gca,'XTickLabel',{'date','date','date','date'})
th=rotateticklabel(gca,45);
Did not work for me. Always got error "There is no 'XTickLabel' property in the 'lineseries' class." , for plot, errorbar or bar. Little documentation provided.
If the y axis is log scale this code will put the new x tickmarks in thw wrong place. Replace "c(1)-.1*(c(2)-c(1))" with the variable "yoffset" and add the following before the text commands to fix the problem:
%get the y axis scale type
yst = get(h,'YScale');
%set up new y location based on scale type of y axis
if strcmp(yst,'log')
c = log10(c)/10;
yoffset = 10^(c(1)-.1*(c(2)-c(1)));
else
yoffset = c(1)-.1*(c(2)-c(1));
end
If your x ticks are 10^something, you can put those back by adding this before the text commands:
%fix for tick lables with exponents
xst = get(h,'XScale');
if strcmp(xst,'log')
a = [repmat('10^{',length(a),1) a repmat('}',length(a),1)];
end
put in the following "if statement" to check if there are yticks enabled.
if numel(c) > 0
if rot<180
th=text(b,repmat(c(1)-.1*(c(2)-c(1)),length(b),1),a,'HorizontalAlignment','right','rotation',rot);
else
th=text(b,repmat(c(1)-.1*(c(2)-c(1)),length(b),1),a,'HorizontalAlignment','left','rotation',rot);
end
else
if rot<180
th=text(b,repmat(-.1,length(b),1),a,'HorizontalAlignment','right','rotation',rot,'fontsize',16);
else
th=text(b,repmat(-.1,length(b),1),a,'HorizontalAlignment','left','rotation',rot,'fontsize',16);
end
end
10 Oct 2008
Angela Seyss
04 Jul 2008
jimmy tsai
thank you this is useful for bar plots.
Matlab should have put in that option the first place.
25 Apr 2008
Fred Glass
This program will sometimes change my plots such that my titles are mislocated.
13 Dec 2007
shawnta zaghotah
you should have more pictures of these ticks but labeled pictures...
05 Dec 2007
James Yu
I guess in your code:
%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
can be simplified as
rot = mod(rot,360);
06 Nov 2007
Shane Migliore
Thanks. Exactly what I was looking for...plus you can use LaTeX with your method since it makes text boxes.
04 Nov 2007
Matthias Hundt
13 Oct 2007
Jose Vargas
It works fine. Thanks a lot for posting this useful function. I still can not believe Matlab 7.2 does not have a rotation tick label property in the axes handle.
12 Oct 2007
Gus Lott
Rotation works well. The rotation goes over the X Axis Label. Will need to lower the x axis label below the new x tick label text.
02 Oct 2007
Lucas Fortini
25 May 2007
Carlos Busso
The only change that I did was to include the font size of the text as a variable. The function is very clever.
17 May 2007
x x
thanks!
12 Feb 2007
g l
The only suggestion I would have is the option to right justify the tick labels. I varied the format to make it compatible with a pareto diagram since some of the names were too long, but not all of the names were of the same length.
10 Jan 2007
Debprakash Patnaik
I am currently using it, Very happy with the results. Thanks
13 Sep 2006
Christoph Mudersbach
Well done. Great idea.
01 Sep 2006
J C
you, sir, are the man.
11 Jul 2006
Scott Otterson
This is a label rotation revolution!
15 Jun 2006
FranÃ§ois Portet
exactly what I was looking for, thank you
09 Jun 2006
peter mao
exactly what i was looking for!
08 Jun 2006
Kathleen Spees
30 Mar 2006
Karl Stahl
18 Feb 2006
alex redstone
Just what i was looking for. There should be a ticklabel property like this for arbitrary rotation. Thanks a lot.