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

plt.xlabel('foo',fontweight='bold')

You can also use LaTeX with the right backend

plt.xlabel(r'$phi$')

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

plt.xlabel(r'$phi$',fontweight='bold')

Nor do the following LaTeX commands seem to have any effect

plt.xlabel(r'$bf phi$')
plt.xlabel(r'$mathbf{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:

r'$boldsymbol{phi}$'

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

matplotlib.rc('text', usetex=True)
matplotlib.rcParams['text.latex.preamble']=[r"usepackage{amsmath}"]
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.