Bold font weight for LaTeX axes label in matplotlib

Posted on

Question :

Bold font weight for LaTeX axes label in matplotlib

In matplotlib you can make the text of an axis label bold by


You can also use LaTeX with the right backend


When you combine them however, the math text is not bold anymore


Nor do the following LaTeX commands seem to have any effect

plt.xlabel(r'$bf phi$')

How can I make a bold $phi$ in my axis label?

Asked By: Hooked


Answer #1:

Unfortunately you can’t bold symbols using the bold font, see this question on tex.stackexchange.

As the answer suggests, you could use boldsymbol to bold phi:


You’ll need to load amsmath into the TeX preamble:

matplotlib.rc('text', usetex=True)
Answered By: Andy Hayden

Answer #2:

If you intend to have consistently bolded fonts throughout the plot, the best way may be to enable latex and add boldmath to your preamble:

# Optionally set font to Computer Modern to avoid common missing font errors
matplotlib.rc('font', family='serif', serif='cm10')

matplotlib.rc('text', usetex=True)
matplotlib.rcParams['text.latex.preamble'] = [r'boldmath']

Then your axis or figure labels can have any mathematical latex expression and still be bold:

plt.xlabel(r'$frac{phi + x}{2}$')

However, for portions of labels that are not mathematical, you’ll need to explicitly set them as bold:

plt.ylabel(r'textbf{Counts of} $lambda$'}
Answered By: drs

Answer #3:

In case anyone stumbles across this from Google like I did, another way that doesn’t require adjusting the rc preamble (and conflicting with non-latex text) is:

ax.set_ylabel(r"$mathbf{partial y / partial x}$")
Answered By: sodoesaburningbus

Answer #4:

As this answer Latex on python: alpha and beta don’t work? points out. You may have a problem with b so boldsymbol may not work as anticipated. In that case you may use something like: '$ \boldsymbol{\beta} $' in your python code. Provided you use the preamble plt.rcParams['text.latex.preamble']=[r"usepackage{amsmath}"]

Answered By: CJD

Leave a Reply

Your email address will not be published.