Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

\text does not work in a matplotlib label

I am using matplotlib together with latex labels for the axis, title and colorbar labels

While it works really great most of the time, it has some issues when you have a formula using \text.

One really simple example.

from matplotlib import pyplot as plt plt.plot([1,2,3]) plt.title(r"$f_{\text{cor, r}}$")  plt.show() 

This will result in an error message like:

IPython/core/formatters.py:239: FormatterWarning: Exception in image/png formatter:  f_{\text{1cor, r}}    ^ Unknown symbol: \text (at char 3), (line:1, col:4)   FormatterWarning, 

Is there an easy way to use \text in there?

like image 603
Daniel Wehner Avatar asked May 23 '14 08:05

Daniel Wehner


People also ask

How do I make text bold in Matplotlib?

Utilizing “Times New Roman” as the font for Matplotlib's bold label. We could use attribute fontweight=”bold” to get the Matplotlib label bold when utilizing “Times New Roman.”


1 Answers

\text won't work because it requires the amsmath package (not included in mathtext - the math rendering engine of matplotlib). So you basically have two options:

  • use latex based font rendering
from matplotlib import pyplot as plt import matplotlib as mpl mpl.rcParams['text.usetex'] = True mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}'] #for \text command plt.plot([1,2,3]) plt.title(r"$f_{\text{cor, r}}$") plt.show() 
  1. use mathtext but use \mathrm instead of \text
from matplotlib import pyplot as plt import matplotlib as mpl mpl.rcParams['text.usetex'] = False  # not really needed plt.plot([1,2,3]) plt.title(r"$f_{\mathrm{cor, r}}$") plt.show() 

The latter approach creates a figure like enter image description here
Be aware that unlike with the \text command, spaces inside the \mathrm environment are not respected. If you want more space between the variables you have to use latex style commands (\<space>, \;, ...).

like image 111
Jakob Avatar answered Oct 05 '22 17:10

Jakob