Можно ли добавить цифры в Pd fPages Matplotlib?
Я хочу сохранить 2 фигуры, созданные в разных частях сценария, в PDF с помощью PdfPages. Можно ли добавить их в 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 ответа
Извините, это глупый вопрос. Мы просто не должны использовать 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()
Я думаю, что ответ Прашанта можно обобщить немного лучше, например, включив его в цикл 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()
Ни один из этих параметров не добавляется, если файл уже закрыт (например, файл создается за один запуск вашей программы, и вы снова запускаете программу). В этом случае они все перезаписывают файл.
Я думаю, что добавление в настоящее время не поддерживается. Глядя на код backend_pdf.py
, Я вижу:
class PdfFile(object)
...
def __init__(self, filename):
...
fh = open(filename, 'wb')
Поэтому функция всегда пишет, никогда не добавляется.
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()
Вы можете сделать это напрямую, если ваши данные находятся во фрейме данных.
#
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()