2014-12-11 4 views
3

Я хочу сохранить 2 фигуры, созданные в разных частях скрипта в PDF, используя PdfPages, можно ли их добавить в pdf?Можно ли добавлять фигуры к PdfPages Matplotlib?

Пример:

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) 

ответ

3

К сожалению, это хромой вопрос. Мы просто не должны использовать оператор 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() 
+0

Не является хромым вопросом. Мне нужно было это, чтобы понять ответ. Спасибо за сообщение! – mad5245

0

Вы можете непосредственно сделать так, если ваши данные в кадре данных

# 
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() 
1

Я думаю, что Prashanth's answer может быть обобщена немного лучше, например, путем включения его в цикле, и избежать создание нескольких фигур, которые can generate memory leaks.

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() 
1

Ни один из этих вариантов не добавлять, если файл уже закрыт (например, файл будет создаваться в одном исполнении вашей программы, и вы снова запустить программу). В этом случае все они перезаписывают файл.

Я думаю, что добавление в настоящее время не поддерживается. Глядя на код backend_pdf.py, я вижу:

class PdfFile(object) 
... 
    def __init__(self, filename): 
    ... 
    fh = open(filename, 'wb') 

Поэтому функция не всегда писать, никогда не добавляя.

Смежные вопросы