【问题标题】:Python saving multiple figures into one PDF filePython将多个图形保存到一个PDF文件中
【发布时间】:2013-07-21 06:05:01
【问题描述】:

在 python 中(对于在 GUI 中创建的一个图形),我可以使用以下任一方法将图形保存在 .jpg 和 .pdf 下:

plt.savefig(filename1 +  '.pdf')

plt.savefig(filename1 +  '.jpg')

使用一个文件,我想以 .pdf 或 .jpg 格式保存多个数字(就像在数学实验室中所做的那样)。有人可以帮忙吗?

【问题讨论】:

标签: python matplotlib


【解决方案1】:

使用PdfPages 解决您的问题。将您的 figure 对象传递给 savefig 方法。

例如,如果您打开了一大堆 figure 对象,并且想要将它们保存到多页 PDF 中,您可以这样做:

import matplotlib.backends.backend_pdf
pdf = matplotlib.backends.backend_pdf.PdfPages("output.pdf")
for fig in xrange(1, figure().number): ## will open an empty extra figure :(
    pdf.savefig( fig )
pdf.close()

【讨论】:

  • 对我也很有帮助,但是我不得不使用 xrange(1, figure.number) 作为 Figure object is not callable
  • 我不得不使用 pyplot.gcf().number,我建议你使用它,因为它的适用范围更广。
  • 另外,我忘记推荐的一件事是你应该去 pyplot.gcf().number+1
  • @jimh 好建议,谢谢!使用plt.gcf().number + 1(当然是import matplotlib.pyplot as plt)而不是figure().number 完成了这项工作。 (我在 Python 3.5 上。)
  • 很好的答案,谢谢!它对一些小的修改有很大帮助。需要指出的一件事是,一旦 pdf 关闭,您就无法在 pdf 中编辑/附加任何内容。任何更新都将覆盖原始 pdf。如果您有多个绘图,建议将它们保存在列表/字典中,然后在创建 pdf 时对其进行循环。
【解决方案2】:

您是指将多个图形保存到一个文件,还是使用一个脚本保存多个图形?

以下是使用一个脚本保存两个不同图形的方法。

>>> from matplotlib import pyplot as plt
>>> fig1 = plt.figure()
>>> plt.plot(range(10))
[<matplotlib.lines.Line2D object at 0x10261bd90>]
>>> fig2 = plt.figure()
>>> plt.plot(range(10,20))
[<matplotlib.lines.Line2D object at 0x10263b890>]
>>> fig1.savefig('fig1.png')
>>> fig2.savefig('fig2.png')

...将这两个图生成到它们自己的“.png”文件中:

要将它们保存到同一个文件,请使用subplots

>>> from matplotlib import pyplot as plt
>>> fig = plt.figure()
>>> axis1 = fig.add_subplot(211)
>>> axis1.plot(range(10))
>>> axis2 = fig.add_subplot(212)
>>> axis2.plot(range(10,20))
>>> fig.savefig('multipleplots.png')

上面的脚本产生了这个单一的“.png”文件:

【讨论】:

  • 我认为这应该是公认的答案,因为它确实可以满足 OP 的要求,而无需使用外部库合并两个 pdf 文件。
  • 这不是一个好的答案,因为 OP 没有询问如何在同一个图中绘制多个子图并保存它,也没有询问如何保存到单独的文件中——大概是明显的。问题是关于将单独的数字保存到同一个文件中。
【解决方案3】:

我在同样的问题上苦苦挣扎。我试图将 2,000 个散点图放入一个 .pdf 文件中。我能够启动该程序,但它在几百后中止。 即使我在一个 .pdf 中创建了六个散点图,.pdf 文件也很大(如 7mb),只有六个 .jpg,每个 30kb。当我打开 .pdf 文件时,似乎 .pdf 文件正在绘制图表上的每个点(每个图表都有数千个点),而不是显示图像。总有一天,我会找出正确的选项,但这是一个快速而肮脏的解决方法。我将散点图打印到本地目录中的单个 .jpg 文件中。

【讨论】:

  • 这是一个很好的保存数字的通用方法,但是它不能解决所提出的问题!作者已经知道如何保存单个图形,但想知道如何在一个文档中保存多个图形。
猜你喜欢
  • 1970-01-01
  • 2016-12-20
  • 2011-11-23
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多