Я обновил Анаконда Python до последней версии (4.3), где они модернизированной Matplotlib до версии 2.Matplotlib 2 несовместимым шрифт
Обновления сделали некоторые существенные изменения в стиль по умолчанию (see here). И, хотя мне действительно нравятся некоторые из этих изменений, я не согласен с некоторыми из них.
Поэтому я сделал некоторые изменения, как это было предложено в приведенной выше ссылке:
#%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')
Использование Латекс в качестве осей меток, как в приведенном выше коде, приводит цифру с несовместимым текстом по осям (см следующее образ).
Как вернуться к предыдущей модели поведения (см рисунок ниже) или последовательной схемы шрифта?
EDIT: Использование Latex фоновым Я могу получить хороший результат, но крайне медленно. Во всяком случае, я думаю, что внутренний 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')
В результате с Matplotlib 2 является:
Полученный участок с более старой версии (все еще немного по-другому, может быть, из-за некоторых различий в латексе):
Но опять-таки, желаемый результат то, что получается из старой версии Matplotlib и отображаются на рисунке 2.
В документации, на которую вы ссылаетесь, говорится: «По умолчанию математический шрифт при использовании встроенного механизма математического рендеринга (mathtext) изменился с« Современный компьютер »(то есть LaTeX-like) на« DejaVu Sans »». Другими словами, поведение _default_ должно быть шрифтом sans-serif, таким как ваш нижний граф. Похоже, что '' mathtext.rm ': «serif» - причина, поэтому удаление должно устранить проблему. – roganjosh
Я пробовал это изменение, но результат тот же. – Alex
Я не мог реплицировать, поэтому я попытался обновить matplotlib, и теперь он очень успешно удалил мою установку «numpy», поэтому я ничего не могу проверить. Но в разделе «Математический шрифт» также упоминается «mathtext.fontset»: «cm», поэтому, возможно, это тоже удалит. Я не могу понять, что делает эта линия. – roganjosh