结合您的代码和您提供的链接,这样可以节省一个 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()