是否有可能将数字附加到Matplotlib的PdfPages?

时间:2014-12-11 09:09:04

标签: python matplotlib pdfpages

我想使用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)

5 个答案:

答案 0 :(得分:6)

对不起,这是个蹩脚的问题。我们不应该使用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()

答案 1 :(得分:3)

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

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

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

因此,该功能始终是写作,永不附加。

答案 2 :(得分:2)

我认为Prashanth's answer可以更好地推广,例如将其合并到for循环中,并避免创建多个数字,can generate memory leaks

$request->all()

答案 3 :(得分: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()

答案 4 :(得分:0)

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

使用plt绘制任何想要的内容
pp = PdfPages('multipage.pdf')
plt.savefig(pp, format='pdf')
pp.savefig()

最后,在插入所有页面之后,必须关闭多页面pdf对象。
pp.close()