Как изменить размер шрифта оси в графике matplotlib при рендеринге с использованием Latex?
Шрифт метки метки метки оси, созданный по следующему коду, не является Helvetica, но по-прежнему является стандартным засекреченным компьютером Modern. Любые предложения приветствуются.
from matplotlib import rc, font_manager
from numpy import arange, cos, pi
from matplotlib.pyplot import figure, axes, plot, xlabel, ylabel, title, \
grid, savefig, show
sizeOfFont = 12
fontProperties = {'family':'sans-serif','sans-serif':['Helvetica'],
'weight' : 'normal', 'size' : sizeOfFont}
ticks_font = font_manager.FontProperties(family='Helvetica', style='normal',
size=sizeOfFont, weight='normal', stretch='normal')
rc('text', usetex=True)
rc('font',**fontProperties)
figure(1, figsize=(6,4))
ax = axes([0.1, 0.1, 0.8, 0.7])
t = arange(0.0, 1.0+0.01, 0.01)
s = cos(2*2*pi*t)+2
plot(t, s)
for label in ax.get_xticklabels():
label.set_fontproperties(ticks_font)
for label in ax.get_yticklabels():
label.set_fontproperties(ticks_font)
xlabel(r'\textbf{time (s)}')
ylabel(r'\textit{voltage (mV)}',fontsize=16,family='Helvetica')
title(r"\TeX\ is Number $\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!",
fontsize=16, color='r')
grid(True)
savefig('tex_demo.pdf')
show()
Ответы
Ответ 1
Хорошо, это сработало для меня. Замените следующие строки:
for label in ax.get_xticklabels():
label.set_fontproperties(ticks_font)
for label in ax.get_yticklabels():
label.set_fontproperties(ticks_font)
с этим:
from matplotlib.pyplot import gca
a = gca()
a.set_xticklabels(a.get_xticks(), fontProperties)
a.set_yticklabels(a.get_yticks(), fontProperties)
То, что вы сделали в своем исходном коде, имеет смысл для меня, но я получаю разные результаты таким образом. Weird.
Ответ 2
Я думаю, что путаница здесь проистекает из того, что вы смешиваете команды TeX и non-TeX.
Это включает режим TeX, поэтому весь текст отображается с внешней установкой TeX:
rc('text', usetex=True)
В этой строке установка sans-serif будет передана вместе с TeX, но конкретное имя шрифта ttf не может использоваться TeX, поэтому вторая часть (с участием Helvetica) игнорируется. И установка текстового текста по умолчанию в TeX не позволяет (по умолчанию) изменить шрифт математики. Это (к сожалению, стандартное поведение TeX).
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
Это влияет на набор шрифтов, используемый внутренним средством отображения mathtext matplotlib, и не влияет на TeX:
rc('mathtext', fontset='stixsans')
Решение, которое я использую, когда хочу использовать sans-serif из TeX, это использовать пакет cmbright, который можно включить, добавив:
rc('text.latex', preamble=r'\usepackage{cmbright}')
Это может потребовать установки cmbright пакета LaTeX, если у вас его еще нет.
Ответ 3
Я просто нашел немного простой способ, которым вы можете попробовать.
Просто вызовите метод .xticks и дайте имя шрифта в качестве заданного пользователем аргумента.
например.
import matplotlib.pyplot as plt
plt.figure()
#... do the plot you want...
plt.yticks(fontname = "Times New Roman") # This argument will change the font.
plt.show()