2013-07-30 10 views
28

Chcę tworzyć etykiety do moich działek za pomocą nowoczesnej czcionki komputerowej lateksu. Jednak jedynym sposobem, aby przekonać matplotlib używać czcionki lateks wkładając coś takiego:Matplotlib nie używa czcionki lateksu podczas text.usetex == True

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

To oczywiście śmieszne, mówię lateks, aby uruchomić tryb matematyczny, a następnie wyjść z trybu matematyki tymczasowy napisać rzeczywista strunowy. Jak upewnić się, że wszystkie etykiety są renderowane w lateksie, a nie tylko w formułach? I jak mogę się upewnić, że będzie to zachowanie domyślne?

Minimalny przykładem pracy jest następujący:

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

To daje następujące wyniki:

Plot showing incorrect rendering of latex font types

Tutaj oś x jest jak chcę etykiety wyświetlane. Jak mogę się upewnić, że wszystkie etykiety pojawiają się w ten sposób, bez konieczności przechodzenia do trybu matematycznego iz powrotem?

+1

w moim systemie domyślnym zachowaniem, że 'usetex' umożliwia LaTeX za wszystko, a właściwie jestem dokładnie szuka zachowanie można opisać (LaTeX tylko dla' $ ... $ '). Ponieważ wszystkie odpowiedzi wspominają jedynie o tym, jak należy ustawić 'font.family', aby osiągnąć swój cel, byłoby wspaniale, gdybyś mógł określić alternatywę, która pozwoli uzyskać te czcionki inne niż LaTeX ... – bluenote10

Odpowiedz

31

Czcionka domyślna Lateks jest znany jako 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

Dzięki! Można to włączyć domyślnie, zmieniając plik matplotlibrc. Zestaw: tex.usetex = True font.family = serif font.serif = cm – Dirklinux

+0

Działa, ale nie mogę zapisać działek w formacie EPS (PNG działa poprawnie). W moim przypadku używam czcionki "Times". Nie jest dokładnie taki sam, ale wystarczająco podobny i EPS działa dobrze. – Paglian

8

Zaznaczony odpowiedź może być domyślnie włączona zmieniając kilka wierszy w pliku matplotlibrc:

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

Używam matplotlib 1.3.1 na Mac OSX, dodać następujące linie w matplotlibrc działa dla mnie

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

Korzystanie = prowadzi do UserWarning: Illegal line

Powiązane problemy