matplotlib-savefig,usetex=True

matplotlib-savefig,usetex=True,matplotlib,postscript,axis-labels,tex,Matplotlib,Postscript,Axis Labels,Tex,启用usetex=True时,我无法将matplotlib创建的地物保存为.eps或.ps。这在未启用时有效。下面是一个例子: plt.plot([1,2,3], [1,2,3], 'b.') plt.text(2,2,r'\textbf{(a)} \lambda_{1} value', usetex=True, fontsize=16, fontname='Times New Roman') plt.savefig('check.eps') 我收到这个错误: File "C:\Python2

启用
usetex=True
时,我无法将matplotlib创建的地物保存为.eps或.ps。这在未启用时有效。下面是一个例子:

plt.plot([1,2,3], [1,2,3], 'b.')
plt.text(2,2,r'\textbf{(a)} \lambda_{1} value', usetex=True, fontsize=16, fontname='Times New Roman')
plt.savefig('check.eps')
我收到这个错误:

File "C:\Python27\lib\site-packages\matplotlib\backends\backend_ps.py", line 671, in draw_tex
thetext = 'psmarker%d' % self.textcnt
AttributeError: 'RendererPS' object has no attribute 'textcnt'

当我启用
usetex=True

时,我也无法使用text命令将字体设置为Time New Roman,即使有点晚,如果有人搜索此错误,我想给出一个答案

保存
eps
文件将启动
renderreps
后端,该后端将检查
plt.rcParams['text.usetex']
是否设置为
True
以初始化其
textcnt
属性。由于
usetex
仅为文本对象设置,因此后端不需要处理LaTeX,并在尝试处理时抛出错误。令人遗憾的是,在matplotlib中的许多地方都存在与LaTeX渲染相关的此类不一致

如果无法使用标准matplotib功能实现文本格式,一种解决方案是全局设置
usetex
plt.rcParams['text.usetex']=True
。这将使用LaTeX渲染图形的所有文本(例如,也使用记号标签或轴标签)。我建议在任何情况下都这样做,以获得一致的视觉效果

关于字体,
fontname
参数仅影响标准matplotlib格式。对于LaTeX渲染,必须像在LaTeX中一样指定字体。要获得类似Times New Roman的字体,您需要通过
plt.rcParams['text.latex.premission']=[r'\usepackage{mathptmx}]]加载相应的包,例如
mathptmx
Times
包已弃用)。当然,该软件包必须安装在本地LaTeX安装中。matplotlib中的标准字体系列是无衬线的,因此必须使用
plt.rcParams['font.family']='serif'
将其更改为衬线

最后的代码是:

导入matplotlib.pyplot作为plt
#乳胶装置
plt.rcParams['text.latex.preamble']=[r'\usepackage{mathptmx}']#加载时间罗马字体
plt.rcParams['font.family']=“serif”#默认使用serif字体
plt.rcParams['text.usetex']=True#全局启用LaTeX渲染
plt.图([1,2,3],[1,2,3],“b.”)
plt.text(2,2,r'\textbf{(a)}$\lambda_1$value',fontsize=16)
plt.savefig('check.eps'))
请注意,必须将数学变量用美元符号
$\lambda_1$
括起来,否则会在LaTeX中出现错误或警告。(同样,单字符下标不需要用花括号括起来)

作为旁注:我在再次关闭
usetex
后尝试将图形保存为eps时遇到了相同的错误