/ / Matplotlib nie używa czcionki lateksowej while text.usetex == True - python, matplotlib, latex

Matplotlib nie używa czcionki lateksowej while text.usetex == True - python, matplotlib, latex

Chcę tworzyć etykiety na moich działkach za pomocą nowoczesnej czcionki komputerowej lateksu. Jednak jedynym sposobem na przekonanie matplotlib do używania czcionki lateksowej jest wstawienie czegoś takiego jak:

title(r"$mathrm{test}$")

To oczywiście śmieszne, polecam lateksowiuruchom tryb matematyki, a następnie wyjdź z trybu matematycznego tymczasowo, aby zapisać rzeczywisty ciąg znaków. Jak upewnić się, że wszystkie etykiety są renderowane w lateksie, zamiast tylko formuł? I jak mogę się upewnić, że będzie to zachowanie domyślne?

Minimalny przykład roboczy 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()

Daje to następujący wynik:

Wykres pokazujący nieprawidłowe renderowanie czcionek lateksowych

Tutaj oś x jest tym, w jaki sposób chcę, aby etykiety pojawiały się. Jak mogę się upewnić, że wszystkie etykiety pojawiają się w ten sposób bez konieczności przechodzenia do trybu matematycznego iz powrotem?

Odpowiedzi:

32 dla odpowiedzi nr 1

Domyślna czcionka Latex jest znana 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()

wprowadź opis obrazu tutaj


9 dla odpowiedzi nr 2

Zaznaczoną odpowiedź można włączyć domyślnie, zmieniając kilka linii w matplotlibrc plik:

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

9 dla odpowiedzi nr 3

Używam matplotlib 1.3.1 na Mac OSX, dodać następujące wiersze w matplotlibrc pracuje dla mnie

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

Za pomocą = prowadzi do UserWarning: Illegal line