Will replace axes tick labels with formatted text objects that can include both Tex and LaTex interpreted strings. Primary example is to add degree symbols to labels. Inputs can be a cell array of strings or a single string to be appended to the end of each of the current labels. Header documentation includes several examples. Labels can also be rotated.
I tried for Semilog bar plot. But it is not functioning. All my values are positive, so no problem with semilog in Y axis. Once i change the scale to semilog and run this code, nothing appears in Xticks. Any help?
But I found a small bug:
If I make my tick labels beforehand then use this version of the function:
format_tick(h,tickx,ticky,[],[],[],[],offset);
It re-assigns my tick labels to the default.
I did a quick-fix by copying the lines tickposx = get(h,'XTick'); and
'set(h,'XTickLabel',tickposx);' (located around line 134), and pasting them into the preceding if-statement. then I deleted the extra 'set(h,'XTickLabel',tickposx); '. However, beware! This fix may have introduced other errors that I haven't caught...
Excellent contribution, easy to use, perfectly useful for thesis work... Thank you.. Sorry about my previous post. It was my first.. This contribution deserves full rating..
Good work. It could be improved by allowing to format the y axis only independently of the x axis. Default action should be to do nothing. There are also problems with log plots, ylabels move out of the figure sometimes and xlabels are formatted only in the exponent.
In response to comment suggested by Eric above (Dated: 11 Feb 2009):
I tried copying unicode characters from word, and they show ok in the script editor, but on the figure, they show as "?".
Any one else has noticed this, and have a solution??
I dont want to download this script file just to write character π in the ticklabel.
I did detect a small problem:
it works when I write as the ticklabel '$10^{3}$', or '$10^{+3}$', not with '$10^{-3}$' : the minus sign is not understood !
How can it be ?
A very useful program; however, it doesn't seem to work when I move the y-axis to the right with set(gca,'yaxislocation','right') - does anyone know how to do this?
The reason I ask is because I manually create colourbars with imagesc (so I have better control over the tick labels etc.) and I want the yaxis to sit on the right...
Very nice and very useful. One comment- I believe the 'if' statement on line 303 should be >=, not > so that if only one option is being set the block will be entered.
This is a very useful submission. I'm sorry that I submitted 1 star above, I tried to cancel but couldn't. I think it happened when I refreshed my browser. If someone knows how to cancel it, please by all means do. I meant to give 5 stars.
I just want to say that I made a minor extension to this script. It should appear under my name, it's a very trivial extension: I have Introduced a distinction between offsets for the horizontal axis offset_x and vertical axis offset_y. This is useful if your x-axis and y-axis do not cross at the origin. This extension gives you independent control of the offset for the x-axis labels and y-axis labels. If you're interested it should soon appear under my name. I don't have the reference now as I only just uploaded it. Thanks again to Alexander.
SIMPLE ALTERNATIVE
If you have a word processor (like MS WORD) that allows you to insert special symbols like ½ ° µ you can just copy and paste them directly into MATLAB. If using an m file just copy paste these characters into your quoted character array and pass it to your call to set tick labels. The characters are not exactly the same as the TeX characters so make sure you are consistent with this strategy.
You can fix the problem I described above by saving the text labels' positions and then restoring them after invoking format_ticks(). The following code could be shrunk a tad, but it's general enough in case you are using any type of units for the Position property.
% Save label positions
xl = get(gca,'xlabel');
yl = get(gca,'ylabel');
orig_label_units = get( xl, 'Units');
set([xl yl], 'Units','pixels');
xp = get( xl, 'Position');
yp = get( yl, 'Position');
% Generate the text object ticks (changing labels' Position):
[hx, hy] = format_ticks(gca,'{}','{}')
% Restore original label Position and Units properties:
set( xl, 'Position', xp);
set( yl, 'Position', yp);
set([xl yl], 'Units', orig_label_units);
But when I add X and Y axis labels, they are positioned on top of the new text object ticks when MATLAB detects that the axis doesn't have proper axes ticks anymore.
Is there a way to turn off this last re-layout?
22 Jul 2008
Oskar Vivero
This is a great submission! I only edited a couple of lines to fit my needs (turned off the latex interpreter in order to run the figure through laprint.m). Great job!
07 Apr 2008
Ozgur Akman
Top-notch! Really useful function.
18 Nov 2007
Martin Fischbach
Works like a charm!
Thanks for your effort!
12 Oct 2007
John Nat
Great function. It worked flawlessly in my plots.
However, it pains me to see the great lengths the author had to go simply because Matlab lacks support for LaTeX rendering in the Tick Labels. I hope this support is included in future versions.