Matplotlib, Consistent font using latex

To make the tex-style/mathtext text look like the regular text, you need to set the mathtext font to Bitstream Vera Sans,

import matplotlib
matplotlib.rcParams['mathtext.fontset'] = 'custom'
matplotlib.rcParams['mathtext.rm'] = 'Bitstream Vera Sans'
matplotlib.rcParams['mathtext.it'] = 'Bitstream Vera Sans:italic'
matplotlib.rcParams['mathtext.bf'] = 'Bitstream Vera Sans:bold'
matplotlib.pyplot.title(r'ABC123 vs $\mathrm{ABC123}^{123}$')

If you want the regular text to look like the mathtext text, you can change everything to Stix. This will affect labels, titles, ticks, etc.

import matplotlib
matplotlib.rcParams['mathtext.fontset'] = 'stix'
matplotlib.rcParams['font.family'] = 'STIXGeneral'
matplotlib.pyplot.title(r'ABC123 vs $\mathrm{ABC123}^{123}$')

Basic idea is that you need to set both the regular and mathtext fonts to be the same, and the method of doing so is a bit obscure. You can see a list of the custom fonts,

sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])

As others mentioned, you can also have Latex render everything for you with one font by setting text.usetex in the rcParams, but that’s slow and not entirely necessary.

Leave a Comment