web-dev-qa-db-fra.com

Matplotlib n'utilise pas de police latex lorsque text.usetex == True

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:

Plot showing incorrect rendering of latex font types

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?

36
Dirklinux

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()

enter image description here

36
Greg

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

9
CyLiu

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
9
Dirklinux