Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matplotlib: Change math font size

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?

like image 233
Paul Avatar asked Apr 05 '13 14:04

Paul


People also ask

How do I change text size in Matplotlib?

Plot x data points using plot() method. To change the font size of the scale in matplotlib, we can use labelsize in the ticks_params()method. To display the figure, use show() method.

How do I increase font size in Matplotlib plot?

If you want to change the font size of all plots created as well as all components shown in each individual plot including titles, legend, axes-labels and so on, then you need to update the corresponding parameter in rcParams which is a dictionary containing numerous customisable properties.

How do you change font size in Python code?

The first method for changing the font size is to use the set_theme function. It changes the global defaults so the adjustments will be permanent until you change them again. If you plan to use the same font size for all the plots, then this method is a highly practical one.


2 Answers

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.

like image 187
Jaime Avatar answered Oct 07 '22 16:10

Jaime


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.

like image 36
tacaswell Avatar answered Oct 07 '22 16:10

tacaswell