将带有子图的多个图形保存到具有多个页面的pdf中

时间:2019-11-06 21:48:14

标签: python matplotlib

我目前有一些这样的代码:

text.replaceAll(System.lineSeparator(), "").indexOf(sentence);

假设是否要生成其中的5个图形,每个图形有4张图片。如何将它们保存到具有相同页面的pdf中。

在这里我已经阅读了一些有关如何保存数字的答案。例如,这个

Python saving multiple figures into one PDF file

但是,我不知道如何创建所需的图形。

2 个答案:

答案 0 :(得分:1)

将您的代码和给定的链接结合起来,可以节省一个pdf(output.pdf)和5页,每页上都有一个数字:

import matplotlib.backends.backend_pdf
pdf = matplotlib.backends.backend_pdf.PdfPages("output.pdf")
import numpy as np
import matplotlib.pyplot as plt

def generate_data():
    return np.random.randint(10, size=10)

figs = []
n_figs = 5

for j in range(n_figs): # create all figures

    plt.figure(j)
    plt.suptitle("figure {}" .format(j+1))
    for i in range(4):
        plt.subplot(2, 2, i + 1)
        plt.plot(generate_data())

for fig in range(0, plt.gcf().number + 1): # loop over all figures
    pdf.savefig( fig ) # save each figure in the pdf
pdf.close()

编辑::评论后,这是试图在产生大量图形时使用较少内存的版本。这个想法是在创建每个图形后保存它们,然后将其关闭。

for j in range(n_figs): # create all figures

    plt.figure(j)
    plt.suptitle("figure {}" .format(j+1))
    for i in range(4):
        plt.subplot(2, 2, i + 1)
        plt.plot(generate_data())
    pdf.savefig(j) # save on the fly
    plt.close() # close figure once saved

pdf.close()

EDIT2::这是第三个版本,我不确定哪个可以节省更多的内存。现在的想法是,无需创建和关闭许多图形,而仅创建,保存,清除并重复使用它。

plt.figure(1) # create figure outside loop

for j in range(n_figs): # create all figures

    plt.suptitle("figure {}" .format(j+1))
    for i in range(4):
        plt.subplot(2, 2, i + 1)
        plt.plot(generate_data())
    pdf.savefig(1) # save on the fly
    plt.clf() # clear figure once saved

pdf.close()

答案 1 :(得分:0)

喜欢这个。

fig, ax = plt.subplots(2, 2) 
for i in range(5):
    ax[i].plot(generate_data())
fig.savefig("C:\\test.pdf")