http://matplotlib.sourceforge.net/api/ticker_api.html#matplotlib.ticker.FuncFormatter
2010/4/10 konstellationen <konstellationen@...287...>:
For future reference, the solution proposed by Gökhan and Diakronik is to
replace the Latex tick-labels with strings:
import matplotlib.pyplt as plt
tick_locs = range(start, stop, increment)
plt.xticks(tick_locs, [r"\\mathbf\{%s\}" % x for x in tick_locs])
If you have twin x or y axes (my case), the solution I found was:
(Note: this solution is essentially the same as the one above, with the
distinction that every entry is set manually, which allows for more
flexibility, but requires more work)
from mpl_toolkits.axes_grid.parasite_axes import SubplotHost
from matplotlib.pylab import * # For plotting graphs.
from matplotlib.pyplot import *
fig=figure(1)
host= SubplotHost(fig,111)
fig.add_subplot(host)
par=host.twiny()
host.axis["bottom"]
par.axis["top"]
hostv=[1e-14,1e-4,-1.5,1.5]
host.axis(hostv)
parv=[1e-8,1e2,-1.5,0.5]
par.axis(parv)
host.set_xticks([1e-14, ... ,1e-4])
x_labels = [r'\boldmath 10^\{\-14\} ', ... ,r'\boldmath ']
host.set_xticklabels(x_labels)
par.set_xticks([1e-8, ... ,1e2])
parx_labels = [ r'\boldmath 10^\{\-8\}', ... ,r'\boldmath ' ]
par.set_xticklabels(parx_labels)
host.set_yticks([-1,0])
y_labels = [r'\boldmath \-1', r'\boldmath 0']
host.set_yticklabels(y_labels)
Result:
http://old.nabble.com/file/p28199345/Picture%2B7.png
There is another technique based on the FuncFormatter or the
FormatStrFormatter in matplotlib.ticker, see the link at the very top.
It makes less efford when one can rely on the automatic ticking
mechanism and when one has access to the axis (with i) instances. It
is:
To obtain math-formatted number output:
formatter = matplotlib.ticker.FormatStrFormatter('%g')
axes.xaxis.set_major_formatter(formatter)
The most important is that one has no longer to set the tick locations manually.
For exponential ticks, I would propose (but it's untested):
def exp_fmt(loc):
exponent = numpy.round(numpy.log10(loc))
return '10^%d' % exponent
formatter = matplotlib.ticker.FuncFormatter(exp_fmt)
# And so on.
Note that using r'\\mathbf\{%g\}' makes, for me, no difference. It may
be that one needs matplotlib.rc('text', usetex = True) to make also
numbers bold by \mathbf{}, but iirc, also in LaTeX numbers are always
plain, also in \mathbf{}. \boldmath$$ may be an exception from this
rule.
fwiw,
Friedrich
P.S.: I cannot test usetex = True at the moment, because I end up with
the error 'Could not obtain dvipng version'.