Комбинируя ваш код и ссылку, которую вы дали, это сохраняет один 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()