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%
\text
zal 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()
- gebruik mathtext maar gebruik
\mathrm
in 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
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 \text
te herkennen, maar \mathrm
werkt prima (voor het lettertype ‘roman family’).