Je veux créer des étiquettes pour mes tracés avec la police moderne en latex informatique. Cependant, la seule façon de persuader matplotlib d'utiliser la police latex est d'insérer quelque chose comme:
title(r'$\mathrm{test}$')
C'est bien sûr ridicule, je dis à latex de démarrer le mode mathématique, puis de quitter temporairement le mode mathématique pour écrire la chaîne réelle. Comment puis-je m'assurer que toutes les étiquettes sont rendues en latex, au lieu des seules formules? Et comment puis-je m'assurer que ce sera le comportement par défaut?
Un exemple de travail minimal est le suivant:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
# use latex for font rendering
mpl.rcParams['text.usetex'] = True
x = np.linspace(-50,50,100)
y = np.sin(x)**2/x
plt.plot(x,y)
plt.xlabel(r'$\mathrm{xlabel\;with\;\LaTeX\;font}$')
plt.ylabel(r'Not a latex font')
plt.show()
Cela donne le résultat suivant:
Ici, l'axe x est la façon dont je veux que les étiquettes apparaissent. Comment puis-je m'assurer que toutes les étiquettes apparaissent comme ceci sans avoir à passer en mode mathématique et inversement?
La police Latex par défaut est appelée Computer Modern
:
from matplotlib import rc
import matplotlib.pylab as plt
rc('font', **{'family': 'serif', 'serif': ['Computer Modern']})
rc('text', usetex=True)
x = plt.linspace(0,5)
plt.plot(x,plt.sin(x))
plt.ylabel(r"This is $\sin(x)$", size=20)
plt.show()
J'utilise matplotlib 1.3.1 sur Mac OSX, ajoutez les lignes suivantes dans matplotlibrc
fonctionne pour moi
text.usetex : True
font.family : serif
font.serif : cm
En utilisant =
conduit à un UserWarning: Illegal line
La réponse marquée peut être activée par défaut en modifiant quelques lignes dans le fichier matplotlibrc
:
text.usetex = True
font.family = serif
font.serif = cm