File Exchange

image thumbnail

Rotate Tick Label

version 1.0 (1.78 KB) by

ROTATETICKLABEL rotates tick labels.

4.54545
56 Ratings

39 Downloads

Updated

View License

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.

Comments and Ratings (63)

Ana

Ana (view profile)

jimmy Hsu

great!very thank!

pr

pr (view profile)

Ignore 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'.

pr

pr (view profile)

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

Qian

Qian (view profile)

David Barry

Moroni

Moroni (view profile)

Just what I needed.

Kaveh

Kaveh (view profile)

Radu

Radu (view profile)

Quan Wang

Quan Wang (view profile)

Very very useful!

Derya

Derya (view profile)

Wiviann

My 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.

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.

Worked just fine for me Sonia!

Sonia

Sonia (view profile)

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

Dominik

Pretty 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 Conaway

concise and gets the job done! nice.

Yannick

You 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.

noosa

noosa (view profile)

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 !
    

Chris Taylor

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

Martin

Martin (view profile)

Is there anyway to get this to work on subplots?

Bencatx

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

Ilmira

Ilmira (view profile)

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

Hakon

Hakon (view profile)

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

marcelo

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

Haim

Haim (view profile)

Hakon

Hakon (view profile)

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)

Wlodek Tych

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.

Many thanks to Andrew!

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

Koray

Koray (view profile)

Dymitr Ruta

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

d c

d c (view profile)

log fix didn't work for me

Marissa

Hastiepen

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

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

Quentin

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.

Patrick

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

Ricky

Ricky (view profile)

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

Angela Seyss

jimmy tsai

thank you this is useful for bar plots.
Matlab should have put in that option the first place.

Fred Glass

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

shawnta zaghotah

you should have more pictures of these ticks but labeled pictures...

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

Shane Migliore

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

Matthias Hundt

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.

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.

Lucas Fortini

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.

x x

thanks!

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.

Debprakash Patnaik

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

Christoph Mudersbach

Well done. Great idea.

J C

you, sir, are the man.

Scott Otterson

This is a label rotation revolution!

François Portet

exactly what I was looking for, thank you

peter mao

exactly what i was looking for!

Kathleen Spees

Karl Stahl

alex redstone

Just what i was looking for. There should be a ticklabel property like this for arbitrary rotation. Thanks a lot.

oh kwoun

MATLAB Release
MATLAB 7 (R14)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video