Можно ли добавить цифры в 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()
Другие вопросы по тегам