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:

Tracé montrant un rendu incorrect des types de polices latex

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?

30
demandé sur psxls 2013-07-31 02:20:58

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

entrez la description de l'image ici

33
répondu Greg 2013-07-31 09:59:45

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
9
répondu Dirklinux 2014-01-20 00:11:48

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

9
répondu CyLiu 2014-04-07 01:22:31