Matplotlib n'utilise pas la police latex pendant le texte.usetex = = vrai
Je veux créer des étiquettes pour mes tracés avec la police latex computer modern. 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, puis de quitter le mode math temporaire pour écrire la chaîne réelle. Comment puis-je m'assurer que toutes les étiquettes sont rendues en latex, au lieu de simplement les formules? Et comment puis-je m'assurer que ce sera le comportement par défaut?
Un minimum l'exemple de travail 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 des 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 à nouveau?
3 réponses
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()
La réponse marquée peut être activée par défaut en changeant quelques lignes dans le fichier matplotlibrc
:
text.usetex = True
font.family = serif
font.serif = cm
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
Utiliser =
conduit à un UserWarning: Illegal line