自新安装以来,使用 tex 时无法在 matplotlib 中将图像保存为 eps

自新安装以来,使用 tex 时无法在 matplotlib 中将图像保存为 eps

我想将 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不是.epsvia plt.savefig();不要使用bbox_inches="tight",否则某些图形可能会在稍后被剪切。
  • 在命令行上将文件转换.ps.epsvia 。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 才能上传到此网站)。

情节.eps

答案2

matplotlib我发现使用最新版本 3.5.1plt.savefig()时存在问题*.eps

plt.savefig(filename.eps,format='eps')

那么生成的图像就只是空白的。

matplotlib通过使用和安装版本 3.3.4,这个问题已得到解决。

pip install matplotlib==3.3.4

相关内容