从以下代码生成的轴刻度标记的字体不是Helvetica,但仍然是默认的serif Computer 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()
答案 0 :(得分:18)
我认为这里的混淆源于你正在混合使用TeX和非TeX字体命令。
这将打开TeX模式,因此所有文本都使用外部TeX安装进行渲染:
rc('text', usetex=True)
在这一行中,将其设置为sans-serif将传递给TeX,但TeX不能使用特定的ttf字体名称,因此忽略第二部分(涉及Helvetica)。在TeX中设置默认正文文本(默认情况下)不会更改数学字体。这是(遗憾的是标准的TeX行为)。
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
这会影响matplotlib的内部mathtext渲染器使用的字体集,并且对TeX没有影响:
rc('mathtext', fontset='stixsans')
当我想要从TeX中删除所有sans-serif时使用的解决方案是使用cmbright包,可以通过添加以下内容打开它:
rc('text.latex', preamble=r'\usepackage{cmbright}')
如果您还没有安装cmbright LaTeX包,可能需要安装它。
答案 1 :(得分:16)
好的,这对我有用。替换以下行:
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)
您在原始代码中所做的事情对我来说很有意义,但我会以这种方式获得不同的结果。怪异。
答案 2 :(得分:3)
我发现你可以尝试一些简单的方法。 只需调用.xticks方法并将fontname作为用户设置参数。
e.g。
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()