我想将 matplotlib 中的图保存为 eps 文件,以前这样做没有问题。但是,今天我重新安装了 latex,从那以后,我遇到了 eps 问题。我有以下 MWE
import matplotlib.pyplot as plt
from matplotlib import rc
rc('text', usetex=True)
fig, ax = plt.subplots()
ax.plot(0,0, label = r'$8$')
plt.savefig('plot.jpg')
plt.savefig('plot.eps')
plt.close()
不会产生错误消息。jpg 保存正确,但 eps 文件只是纯白色。我尝试卸载并重新安装 latex
sudo apt-get remove dvipng texlive-latex-extra texlive-fonts-recommended texmf texlive tex-common cm-super
sudo apt-get install dvipng texlive-latex-extra texlive-fonts-recommended cm-super
但仍然有同样的问题。我使用的是 Ubuntu 18.04.4、Matplotlib 3.2.1、Python 3.6.9。我尝试通过 Spyder 和命令行运行脚本,但都没有成功。有人知道问题可能出在哪里吗?
我把 matplotlib.cache 中生成的 tex 文件插入到 latex 编辑器中,但无法编译,而是出现行错误unknown graphics extension ps
。\includegraphics*[angle=0]{/tmp/tmpnu3znvkl/tmp.ps}
问题可能是 latex 以某种方式混淆了 ps 和 eps?
答案1
我遇到了同样令人沮丧的问题,但如果您使用的是 unix/linux 机器,这里有一个解决方法。至少,这对我在 MacOS 上有效。
- 将文件保存为 而
.ps
不是.eps
viaplt.savefig()
;不要使用bbox_inches="tight"
,否则某些图形可能会在稍后被剪切。 - 在命令行上将文件转换
.ps
为.eps
via 。ps2eps
Python部分:
import matplotlib.pyplot as plt
plt.rc('text', usetex=True)
plt.rc('legend', frameon=False) # PS doesn't do well with transparencies
fig, ax = plt.subplots()
ax.plot([0,1,2], [0,1,2], label=r'$y = mx + b$') # Latex legend label.
ax.text(1, 0, r"$e^{ix} = \cos(x) + i\sin(x)$") # More Latex text.
ax.legend(loc="upper left")
plt.savefig('plot.ps') # Postscript, not Encapsulated Postscript
现在在命令行中,
$ ps2eps -g plot.ps
这应该会创建一个plot.eps
您可以打开并检查的文件。当我使用预览 (MacOS) 打开它时,它会将其转换为如下所示的 PDF(然后我必须将其转换为 PNG 才能上传到此网站)。
答案2
matplotlib
我发现使用最新版本 3.5.1plt.savefig()
时存在问题*.eps
:
plt.savefig(filename.eps,format='eps')
那么生成的图像就只是空白的。
matplotlib
通过使用和安装版本 3.3.4,这个问题已得到解决。
pip install matplotlib==3.3.4