19
votes

I am making some plots with matplotlib, and I've come across a problem with the TeX rendering. It seems that the mathtext x-height is is a bit smaller than the normal Bitstream Vera Sans. See the following example:

x = linspace(0, 30, 300);
y = 0.5*rand(300)+20/(numpy.power(x-15, 2)+4);
xlabel(r'$\omega$ (rad$\cdot$Hz)');
ylabel(r'Intensity$^2$');
title(r'Why is $mathtext$ so much smaller than normal text?');

Plot of some random data illustrating the issue.

As you can see, it's particularly noticeable with greek letters and numbers. Ideally, I'd be able to define some scaling factor that would just make the math text a bit bigger at each font size. Is there any way to do this simply? I do not want to simply use Computer Modern everywhere. I also do not want to compile a new Tex math font, if that's even possible.

One solution that I would be on board with is using sans-serif fonts for the greek letters and numerals, but for whatever reason, matplotlib ignores formatting on those:

title('Why does $mat\mathsf{plot}lib$ ignore formatting for $\mathsf{2}$ ($\mathsf{two}), $\mathbf{2}$ ($\mathbf{two}) and $\mathsf{\omega}$?')

Title changed

I assume it's something to do with the nature of how these things are typeset, but is there any way to fix it?

3
Are using the internal math render or an external latex installation? - tacaswell
I think internal math render. I haven't changed it from the default. rcParams['pgf.texsystem'] resolves to 'xelatex', but I don't really know what that's used for. - Paul

3 Answers

11
votes

From the matplotlib docs:

Additionally, you can use \mathdefault{...} or its alias \mathregular{...} to use the font used for regular text outside of mathtext. There are a number of limitations to this approach, most notably that far fewer symbols will be available, but it can be useful to make math expressions blend well with other text in the plot.

3
votes

Try setting

rcParams['text.usetex'] = True

which will try to use an external LaTeX installation, rather than the built in mathtext renderer. See this wiki (even though it is a tad out-dated) and the discussion on issue #1336

Another option, if you are targeting LaTeX, is to use pstricks.