zaktualizowałem Anakonda Pythona do najnowszej wersji (4.3), gdzie przenieśli matplotlib do wersji 2.matplotlib 2 niespójne czcionki
Aktualizacja poczyniła pewne istotne zmiany w domyślnym stylu (see here). I chociaż naprawdę podobają mi się niektóre z tych zmian, nie zgadzam się z niektórymi z nich.
Stąd zrobiłem pewne modyfikacje, jak zasugerowano w linku powyżej:
#%matplotlib inline
#%config InlineBackend.figure_format = 'svg'
import scipy as sc
import matplotlib.pyplot as plt
import matplotlib
# http://matplotlib.org/users/dflt_style_changes.html
params = {'legend.fontsize': 18,
'axes.labelsize': 18,
'axes.titlesize': 18,
'xtick.labelsize' :12,
'ytick.labelsize': 12,
'mathtext.fontset': 'cm',
'mathtext.rm': 'serif',
'grid.color': 'k',
'grid.linestyle': ':',
'grid.linewidth': 0.5,
}
matplotlib.rcParams.update(params)
x = sc.linspace(0,100)
y = x**2
fig = plt.figure('Fig')
ax = fig.add_subplot(1, 1, 1)
lines = ax.semilogy(x, y)
ax.set_yticks([300], minor=True)
ax.yaxis.grid(True, which='minor')
ax.yaxis.set_minor_formatter(matplotlib.ticker.ScalarFormatter())
ax.tick_params(axis='y', pad=10)
ax.set_xlabel(r'$\mathrm{R_L}$')
ax.set_ylabel(r'$\sigma \int_l \; dx$')
#fig.savefig('./PNG/test.png', dpi=300, bbox_inches='tight')
użycia lateksu jako etykiet osi, tak jak w powyższym kodzie, powoduje rysunku z tekstem niespójnym na osiach (patrz poniższy obraz).
Jak wrócić do poprzedniego zachowania (patrz zdjęcie poniżej) lub do spójnego systemu czcionki?
EDIT: Korzystanie z lateksu back-end Jestem w stanie uzyskać dobry wynik, ale to jest bardzo powolny. W każdym razie, myślę, że wewnętrzny back-end powinien być w stanie uzyskać spójne dane wyjściowe, a przejście na inny back-end nie jest prawdziwym rozwiązaniem, ale bardziej obejściem problemu.
Aby korzystać z lateksu back-end:
#%matplotlib inline
#%matplotlib notebook
#%config InlineBackend.figure_format = 'svg'
import scipy as sc
import matplotlib.pyplot as plt
import matplotlib
# http://matplotlib.org/users/dflt_style_changes.html
params = {'legend.fontsize': 18,
'axes.labelsize': 18,
'axes.titlesize': 18,
'xtick.labelsize' :12,
'ytick.labelsize': 12,
'mathtext.fontset': 'cm',
'mathtext.rm': 'serif',
'grid.color': 'k',
'grid.linestyle': ':',
'grid.linewidth': 0.5,
}
matplotlib.rcParams.update(params)
matplotlib.rcParams.update({'text.usetex':True, 'text.latex.preamble':[r'\usepackage{amsmath, newtxmath}']})
x = sc.linspace(0,100)
y = x**2
fig = plt.figure('Fig')
ax = fig.add_subplot(1, 1, 1)
lines = ax.semilogy(x, y)
ax.set_yticks([300], minor=True)
ax.yaxis.grid(True, which='minor')
ax.yaxis.set_minor_formatter(matplotlib.ticker.ScalarFormatter())
ax.tick_params(axis='y', pad=10)
ax.set_xlabel(r'$\mathrm{R_L}$')
ax.set_ylabel(r'$\sigma \int_l \; dx$')
#fig.savefig('./PNG/test.png', dpi=300, bbox_inches='tight')
Wynik z matplotlib 2 jest:
Powstały działka w starszej wersji (jeszcze trochę inaczej, może ze względu na pewne różnice lateksowe):
Ale znowu, pożądany rezultat jest co uzyskano ze starszej wersji matplotlib i wyświetlane na rysunku 2.
Dokumentacja, do której prowadzi łącze, mówi: "Domyślna czcionka matematyczna podczas korzystania z wbudowanego mechanizmu renderującego matematykę (mathtext) zmieniła się z" Nowoczesny komputer "(np. LaTeX-like) na" DejaVu Sans "." Innymi słowy, zachowanie _default_ powinno być czcionką bezszeryfową, taką jak twój dolny wykres. Wygląda na '' mathtext.rm ': "serif" jest przyczyną, usunięcie go powinno naprawić problem. – roganjosh
Próbowałem tej zmiany, ale wynik jest taki sam. – Alex
Nie mogłem replikować, więc próbowałem uaktualnić matplotlib i teraz bardzo pomocnie usunięto moją instalację 'numpy', więc nie mogę niczego przetestować. Ale sekcja z czcionką matematyczną wspomina także o ''mathtext.fontset': 'cm'', więc może to również usunąć. Nie mogę zrozumieć, co robi ta linia. – roganjosh