2013-07-30 7 views
28

Desidero creare etichette per i miei grafici con il carattere moderno del computer in lattice. Tuttavia, l'unico modo per convincere matplotlib per utilizzare il carattere lattice è con l'inserimento di qualcosa di simile a:Matplotlib che non utilizza font in lattice mentre text.usetex == True

title(r'$\mathrm{test}$') 

Questo è ovviamente ridicola, dico lattice per avviare la modalità matematica, e quindi uscire da modalità matematica temporanea di scrivere l'attuale stringa. Come faccio a essere sicuro che tutte le etichette siano rese in lattice, anziché solo le formule? E come posso assicurarmi che questo sia il comportamento predefinito?

Un esempio di lavoro minima è la seguente:

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

Questo dà il seguente risultato:

Plot showing incorrect rendering of latex font types

Qui l'asse X è come voglio apparire le etichette. Come posso assicurarmi che tutte le etichette appaiano così senza dover andare in modalità matematica e viceversa?

+1

Sul mio sistema il comportamento predefinito è che 'usetex' consente LaTeX per tutto, e in realtà sto esattamente cercando il comportamento descritto (LaTeX solo per' $ ... $ '). Dal momento che tutte le risposte menzionano solo come 'font.family' deve essere impostato per raggiungere il tuo caso, sarebbe bello se tu potessi specificare l'alternativa che ottiene questi caratteri non LaTeX ... – bluenote10

risposta

31

Il font predefinito in lattice è conosciuto come 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

+2

Grazie! Questo può essere abilitato di default cambiando il file matplotlibrc. Set: tex.usetex = True font.family = serif font.serif = cm – Dirklinux

+0

Funziona ma non è possibile salvare i grafici in formato EPS (PNG funziona correttamente). Nel mio caso sto usando il carattere 'Times'. Non è esattamente la stessa cosa ma abbastanza simile e l'EPS funziona bene. – Paglian

8

La risposta marcata può essere abilitata per default modificando poche righe nel file matplotlibrc:

text.usetex = True 
font.family = serif 
font.serif = cm 
8

Sto usando matplotlib 1.3.1 su Mac OSX, aggiungo le seguenti righe in matplotlibrc funziona per me

text.usetex : True 
font.family : serif 
font.serif : cm 

Utilizzando = porta ad un UserWarning: Illegal line

Problemi correlati