python-2.7 - 无法将图形另存为 .eps [无法识别 gswin32c]

标签 python-2.7 matplotlib eps

我在 PyLab(64 位)中使用 Enthought Canopy。对于我的报告,我需要使用 Latex (XeLaTex) 并且绘图是使用 matplotlib 完成的。

为了获得第一个想法,我刚刚从 http://matplotlib.org/users/usetex.html 复制了第二个示例并编译它。它看起来不错,我可以毫无问题地将它保存为普通 png。但是,如果我尝试将其另存为 .eps 或 .ps,它不起作用并出现错误:

以 10 为底的 int() 的无效文字:“

另外在 Pylab shell 中它显示:

“gswin32c”不是内部或外部命令,也不是可运行的程序或批处理文件。

如果我将其另存为 .pdf,我没有任何问题,除了文本全是黑色而不是红色和蓝色。这是一个问题,因为在我的绘图中有两个轴,我需要将它们着色以提高可读性。

如果我随后尝试从给定的示例(所有文本)中删除一些行,我仍然无法将其保存为 .eps 或 .ps。我无法弄清楚问题所在,与此相关的所有其他主题都没有给我一个洞察力。所以我真的需要你的帮助,因为我不能为我的报告使用 .png。

提前致谢!!!

最佳答案

我终于设法解决了这个问题。它可能看起来很奇怪,但也许其他人可以从中受益。

解决方案可能取决于您使用的软件。我在 W8 64 位下使用 Enthought Canopy (Python) 和 MikTeX 2.9。 如果您想使用 'text.usetex': True 选项使用 matplotlib 输出 .ps 和 .eps 文件,那么您将遇到上面发布的问题。

解决方法:

  1. http://www.ghostscript.com/download/gsdnld.html 下载并安装 Ghostscript(32 位) .
  2. http://www.tm.uka.de/~bless/ps2eps 下载 ps2eps-1.68.zip .程序在手册中给出,但我想指出环境变量的部分。在这最后一步中,您需要转至控制面板 --> 系统 --> 高级系统设置。然后单击“高级”标题,然后在窗口底部看到单击的“环境变量”。然后使用“新建”按钮为 USERNAME 设置用户变量。然后输入变量名“ps2eps”,输入保存 ps2eps.pl 文件的实际路径作为变量值。在我的例子中,这是“C:\Program Files (x86)\ps2eps\bin\”。您可以检查是否在命令窗口中键入“ps2eps”。
  3. http://www.foolabs.com/xpdf/download.html下载xpdfbin-win-3.03.zip .您只需要文件“pdftops.exe”。但是我无法像步骤 2 中那样分配路径。我通过将 'pdftops.exe' 放在 MikTeX 2.9 文件夹中解决了这个问题。我的确切位置是“C:\Program Files\MiKTeX 2.9\miktex\bin\x64”。

然后我可以将图形保存为 .ps 并且不再有任何错误消息。请记住使用 http://matplotlib.org/users/usetex.html 上建议的设置在“后记选项”下。 我自己使用了以下设置:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import matplotlib as mpl
mpl.rc('font', **{'family':'serif', 'serif':['Computer Modern Roman'],
              'monospace':['Computer Modern Typewriter']})
params = {'backend': 'ps',
      'text.latex.preamble': [r"\usepackage{upgreek}",
                              r"\usepackage{siunitx}",
                              r"\usepackage{amsmath}",
                              r"\usepackage{amstext}",],
      'axes.labelsize': 18,
      #'axes.linewidth': 1,
      #'text.fontsize':17,
      'legend.fontsize': 10,
      'xtick.labelsize': 13,
      #'xtick.major.width' : 0.75,
      'ytick.labelsize': 13,
      'figure.figsize': [8.8,6.8],
      #'figure.dpi': 120,
      'text.usetex': True,
      'axes.unicode_minus': True,
      'ps.usedistiller' : 'xpdf'}          
mpl.rcParams.update(params)
mpl.rcParams.update({'figure.autolayout':True})

(而许多参数只是为了我稍后在情节中的目的)

作为初学者,如果您从 Python 控制台运行脚本,我不太了解所使用的“后端”的依赖性。但是,我之前在没有任何 --pylab 设置的情况下使用过它,我不知道如果他已经在具有特定 matplotlib 后端的控制台中工作,是否需要手动切换后端。

关于python-2.7 - 无法将图形另存为 .eps [无法识别 gswin32c],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19745282/

相关文章:

python - 为什么python2用编码转义字符保存文本?

python - python 2.7 中的 MSSQL

python - Matplotlib 3D 震源图,从 .txt 文件中读取 xyz 值

python - 为什么我的图表是一个疯狂闪烁的怪物?

java - 需要在 Java 中将 EPS 文件转换为 jpg/png

python - 在 python 中创建 cd 式结构的奇怪问题

python - 使用 setup.py bdist_wininst 构建的 Windows 安装程序在安装时触发 RuntimeError。我该如何解决?

python - readthedocs 上的 Sphinx autodoc : ImportError: No module named _tkinter

imagemagick - 按比例缩小大的 EPS 图片,没有尖锐的结果和剪切路径

python - 在 Python 图像库中将 EPS 文件转换为 PNG 时更改输出分辨率