我被要求将我的论文中的一些数字从使用Type 3 Font更改为使用Type 1 Font,我找到了instruction 做好工作。
通过添加以下3行,我能够生成Type 1 Font .pdf文件:
matplotlib.rcParams['ps.useafm'] = True
matplotlib.rcParams['pdf.use14corefonts'] = True
matplotlib.rcParams['text.usetex'] = True
然而,虽然我的旧情节上的x-tick和y-tick的字体是统一的,但是在我添加了3行代码后,它们的字体在某种程度上变得不同了。这对我来说似乎很奇怪,因为更改仅应用于其中一个刻度。
这是python中的脚本:
import matplotlib
matplotlib.use('PDF')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
# Switch to Type 1 Fonts.
matplotlib.rcParams['ps.useafm'] = True
matplotlib.rcParams['pdf.use14corefonts'] = True
matplotlib.rcParams['text.usetex'] = True
def plot_pdf_figure(path, title, xl, yl, xt_list, yl_list, style_list):
fig = plt.figure(path)
ax = fig.add_subplot(111)
ax.set_title(title)
ax.set_xlabel(xl, style='italic')
ax.set_ylabel(yl)
x_list = range(0, len(xt_list))
plt.xticks(x_list, xt_list)
for y_list, style in zip(yl_list, style_list):
ax.plot(x_list, y_list, style)
pp = PdfPages(path)
pp.savefig(fig)
pp.close()
plot_pdf_figure("test_plot.pdf", "test", "x-axis", "y-axis", [1,2,3,4,5,6], [[1,2,4,8,16,32],[32,16,8,4,2,1]], ["-ro","-gs"])
感谢您提供任何指导或帮助!
答案 0 :(得分:3)
这是plt.xticks
来电的结果。
当rcParams['text.usetex']
为True
时,MPL会在$
中包含标记。例如,ax.get_xticklabels()[0].get_text()
在u'0'
为usetex
时为False
,在u'$0$'
为usetex
时为True
。
但是,当你覆盖默认的tick标签时,你必须自己包装它们,否则你会得到sans-serif字体。所以,要解决此问题,我会将您的plt.xticks
行更改为:
plt.xticks(x_list, ['$' + str(xt) + '$' for xt in xt_list])
这里我使用列表推导来循环遍历ticklabels。我想也可以将默认的sans-serif字体系列更改为与serif系列相同的(serif)字体,但我认为这可能无法完全解决x和y标签之间的差异,因为字符串是实际上是不同的。