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.

Andrew Bliss (2021). Rotate Tick Label (https://www.mathworks.com/matlabcentral/fileexchange/8722-rotate-tick-label), MATLAB Central File Exchange. Retrieved .

Created with
R14

Compatible with any release

**Inspired:**
kristinbranson/JAABA, Rotate and alternate tick labels on any Xaxis (top or bottom), XYrotalabel - rotate X-axis and Y-axis labels

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!Create scripts with code, output, and formatted text in a single executable document.

yue qinTerrifc!

Anajimmy Hsugreat!very thank!

prIgnore my last comment.

I found the solution. before calling the function I empty the xticklabel. code:

Ax = Plotyy(x,y1,x,y2);

set(Ax(2),'XTickLabel',[]);

then I call the function to rotate the 'XTickLabel'.

prThis function is not working for "plotyy". Would you please look into this issue? Thankyou.

QianDavid BarryMoroniJust what I needed.

KavehRaduQuan WangVery very useful!

DeryaWiviannMy data has 72 columns. I get an error message when using the rotateticklabel function according to:

Index exceeds matrix dimensions.

Error in rotateXLabels/createNewLabels (line 146)

textLabels(ll) = text( ...

Error in rotateXLabels (line 34)

h = createNewLabels( ax, vals, labels, angle );

It works fine up to 47 columns. But if the data is larger, I get this error.

Does anyone know how to solve this?

Thank you in advance.

William MurphyIt 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.

Carlos ParadisWorked just fine for me Sonia!

SoniaI cannot download the function, I am redirected to a page that reportedly doesn´t exist... Any help??

DominikPretty slick. But why do the axis labels get moved to the top axis? I'm using it with subplot(1,2,x) and imagesc. Can anyone help with this?

Nolan Conawayconcise and gets the job done! nice.

Pascal SZACHERSKIYannickYou may want to add the parameters

,'Parent',h

to the end of the 'text' commands in order not to rely on the value of gca.

noosaI 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 !

Chris TaylorSeems great, although it sometimes rotates axes off the visible section of the plot!

MartinIs there anyway to get this to work on subplots?

BencatxJonathan C. LanseyGreat! I modified it to keep the specified axis fontsize with the following:

% Add this line:

fsize = get(h,'fontsize');

% Modify this line to add 'fontsize',fsize

th=text(b,repmat(c(1)-.1*(c(2)-c(1)),length(b),1),a,'HorizontalAlignment','right','rotation',rot,'fontsize',fsize);

Ilmiravery helpful function. thank you!

simple example of using with months:

startDate = datenum ('01-2009','mm-yyyy')

endDate = datenum('10-2010','mm-yyyy')

date = linspace(startDate,endDate,22);

plot(date, sRate), grid

set(gca,'XTick',date)

datetick('x','mmmyy','keepticks')

rotateticklabel(gca, 45)

HakonMarcelo - thanks - I had that same problem, your fix solved it.

marceloFor my graphs, I had an error that reads

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);

HaimHakonThanks 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)

Wlodek TychSo 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.

Many thanks to Andrew!

Jaroslaw TuszynskiFunction did not work correctly for labeling images, but I was able to modify it to work

gkorayDymitr RutaThe 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')

d clog fix didn't work for me

MarissaHastiepenPerfect; very easy to use and is exactly what I needed, thank you very much!

Thodoris PapadopoulosIt 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);

QuentinDid not work for me. Always got error "There is no 'XTickLabel' property in the 'lineseries' class." , for plot, errorbar or bar. Little documentation provided.

PatrickIf 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

Rickyput 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

Angela Seyssjimmy tsaithank you this is useful for bar plots.

Matlab should have put in that option the first place.

Fred GlassThis program will sometimes change my plots such that my titles are mislocated.

shawnta zaghotahyou should have more pictures of these ticks but labeled pictures...

James YuI 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);

Shane MiglioreThanks. Exactly what I was looking for...plus you can use LaTeX with your method since it makes text boxes.

Matthias HundtJose VargasIt 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.

Gus LottRotation 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.

Lucas FortiniCarlos BussoThe only change that I did was to include the font size of the text as a variable. The function is very clever.

x xthanks!

g lThe 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.

Debprakash PatnaikI am currently using it, Very happy with the results. Thanks

Christoph MudersbachWell done. Great idea.

J Cyou, sir, are the man.

Scott OttersonThis is a label rotation revolution!

FranÃ§ois Portetexactly what I was looking for, thank you

peter maoexactly what i was looking for!

Kathleen SpeesKarl Stahlalex redstoneJust what i was looking for. There should be a ticklabel property like this for arbitrary rotation. Thanks a lot.

oh kwoun