10

我想使用 PdfPages 将在脚本的不同部分创建的 2 个图形保存到 PDF 中,是否可以将它们附加到 pdf 中?

例子:

fig = plt.figure()
ax = fig_zoom.add_subplot(111)
ax.plot(range(10), range(10), 'b')

with PdfPages(pdffilepath) as pdf:
    pdf.savefig(fig)

fig1 = plt.figure()
ax = fig_zoom.add_subplot(111)
ax.plot(range(10), range(2, 12), 'r')

with PdfPages(pdffilepath) as pdf:
    pdf.savefig(fig1)
4

5 回答 5

9

对不起,这是一个蹩脚的问题。我们只是不应该使用该with语句。

fig = plt.figure()
ax = fig_zoom.add_subplot(111)
ax.plot(range(10), range(10), 'b')

# create a PdfPages object
pdf = PdfPages(pdffilepath)

# save plot using savefig() method of pdf object
pdf.savefig(fig)

fig1 = plt.figure()
ax = fig_zoom.add_subplot(111)
ax.plot(range(10), range(2, 12), 'r')

pdf.savefig(fig1)

# remember to close the object to ensure writing multiple plots
pdf.close()
于 2014-12-11T09:18:48.797 回答
5

如果文件已经关闭,则这些选项都不会附加(例如,文件是在您的程序的一次执行中创建的,然后您再次运行该程序)。在那个用例中,它们都会覆盖文件。

我认为目前不支持追加。查看 的代码backend_pdf.py,我看到:

class PdfFile(object)
...
  def __init__(self, filename):  
    ...
    fh = open(filename, 'wb')

因此,该函数始终在写入,从不附加。

于 2017-08-10T18:13:59.333 回答
3

我认为Prashanth 的答案可以更好地概括,例如通过将其合并到 for 循环中,并避免创建多个图形,这会产生内存泄漏

import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages

# create a PdfPages object
pdf = PdfPages('out.pdf')

# define here the dimension of your figure
fig = plt.figure()

for color in ['blue', 'red']:
    plt.plot(range(10), range(10), color)

    # save the current figure
    pdf.savefig(fig)

    # destroy the current figure
    # saves memory as opposed to create a new figure
    plt.clf()

# remember to close the object to ensure writing multiple plots
pdf.close()
于 2017-07-06T16:29:04.530 回答
1
import matplotlib.pyplot as plt 
from matplotlib.backends.backend_pdf import PdfPages

# Use plt to draw whatever you want  
pp = PdfPages('multipage.pdf')
plt.savefig(pp, format='pdf')
pp.savefig()

# Finally, after inserting all the pages, the multipage pdf object has to be closed.  
pp.close()
于 2019-12-29T18:34:32.440 回答
0

如果您的数据在数据框中,您可以直接这样做

#
with PdfPages(r"C:\Users\ddadi\Documents\multipage_pdf1.pdf","a") as pdf:
    #insert first image
    dataframe1.plot(kind='barh'); plt.axhline(0, color='k')
    plt.title("first page")
    pdf.savefig()
    plt.close()

    #insert second image
    dataframe2.plot(kind='barh'); plt.axhline(0, color='k')
    plt.title("second page")
    pdf.savefig()
    plt.close()
于 2016-08-03T10:01:25.223 回答