\text werkt niet in een matplotlib-label

Ik gebruik matplotlib samen met latexlabels voor de as-, titel- en kleurbalklabels

Hoewel het meestal heel goed werkt, heeft het enkele problemen als je een formule hebt die \text gebruikt.

Een heel eenvoudig voorbeeld.

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

Dit zal resulteren in een foutmelding zoals:

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 er een gemakkelijke manier om \text daarin te gebruiken?


Antwoord 1, autoriteit 100%

\textzal niet werken omdat het het pakket amsmathvereist (niet inbegrepen in mathtext – de wiskundige weergave-engine van matplotlib). Je hebt dus eigenlijk twee opties:

  • op latex gebaseerde lettertypeweergave gebruiken
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. gebruik mathtext maar gebruik \mathrmin plaats van \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()

De laatste benadering creëert een figuur als
voer hier de afbeeldingsbeschrijving in
Houd er rekening mee dat, in tegenstelling tot de opdracht \text, spaties binnen de \mathrm-omgeving niet worden gerespecteerd. Als je meer ruimte tussen de variabelen wilt, moet je latexstijlcommando’s gebruiken (\<space>, \;, …).


Antwoord 2

Eén optie is om matplot lib LaTeX rechtstreeks te laten gebruikenvoor uw tekstweergave (in plaats van de mathtextimplementatie die matplotlib biedt).

import matplotlib as mpl
mpl.rcParams['text.usetex'] = True
# (create your plot as before)
plt.title(r"$f_{\mathrm{cor, r}}$")

Dit vereist een volledig werkende LaTeX-installatie. Ik krijg het niet voor elkaar om \textte herkennen, maar \mathrmwerkt prima (voor het lettertype ‘roman family’).

Other episodes