我有一個冗長的圖表,由幾個組成列的水平子圖組成。Matplotlib savefig插入PDF的不同頁面
當我打電話給fig.savefig('what.pdf')時,生成的輸出文件顯示所有插入單個頁面的圖表。
問題:有沒有辦法告訴savefig保存任何數量(可能自動確定)的PDF頁面?
如果可能,我寧願避免多個文件,然後使用os.system('merge ...')。
我有一個冗長的圖表,由幾個組成列的水平子圖組成。Matplotlib savefig插入PDF的不同頁面
當我打電話給fig.savefig('what.pdf')時,生成的輸出文件顯示所有插入單個頁面的圖表。
問題:有沒有辦法告訴savefig保存任何數量(可能自動確定)的PDF頁面?
如果可能,我寧願避免多個文件,然後使用os.system('merge ...')。
我還沒有嘗試過自己,但在matplolib常見問題解答中有一些指令可以在幾頁中保存pdf格式的圖表。
我懷疑有一種更優雅的方式來做到這一點,但一種選擇是使用tempfiles或StringIO來避免在系統上創建傳統文件,然後您可以將它們拼接在一起。
你不能只是串聯的PDF文件,並希望得到的結果與組成頁有效的PDF文件。 –
不,我也不是想要建議你可以,但我可以看到它是如何被讀取的。但是有很多像pyPdf這樣的工具可以讓你將多個PDF文件拼接在一起。 – TimothyAWiseman
是的,他的回答是在我的後面。我同意他釘了它。我很高興提到pyPdf的幫助。 – TimothyAWiseman
我不知道如何執行類似的事情。我有一組來自不同圖像文件的圖形,這些圖像文件有所不同。所以這個想法是,一旦我找到了可以在一個頁面中繪製的很好的圖表,就可以將它應用於這些文件。幸運的是,我在這裏找到了一個解決方案:http://blog.marmakoide.org/?p=94。然而它不能正常工作,因爲它只繪製第一塊麪板圖,剩下的面板都是空的。我修改了它,在這裏我包含了一個(1XN)網格和輸出圖的工作版本。
import numpy
from matplotlib import pyplot as plot
from matplotlib.backends.backend_pdf import PdfPages
# Generate the data
data = numpy.random.randn(7, 1024)
# The PDF document
pdf_pages = PdfPages('histograms.pdf')
# Generate the pages
nb_plots = data.shape[0]
nb_plots_per_page = 5
nb_pages = int(numpy.ceil(nb_plots/float(nb_plots_per_page)))
grid_size = (nb_plots_per_page, 1)
for i, samples in enumerate(data):
print
print i,i % nb_plots_per_page,samples
# Create a figure instance (ie. a new page) if needed
if i % nb_plots_per_page == 0:
print 'Opening'
fig = plot.figure(figsize=(8.27, 11.69), dpi=100)
# Close the page if needed
elif (i + 1) % nb_plots_per_page == 0 or (i + 1) == nb_plots:
plot.subplot2grid(grid_size, (i % nb_plots_per_page, 0))
plot.hist(samples, 32, normed=1, facecolor='#808080', alpha=0.75)
plot.title(str(i+1))
plot.tight_layout()
pdf_pages.savefig(fig)
print 'Closing'
print i,samples
# Plot stuffs !
print i,samples
plot.subplot2grid(grid_size, (i % nb_plots_per_page, 0))
plot.hist(samples, 32, normed=1, facecolor='#808080', alpha=0.75)
plot.title(str(i+1))
# Write the PDF document to the disk
pdf_pages.close()
print 'histograms.pdf'
我正在爲此工作。它生成一個pdf,但仍然只有一個。我需要一些時間來弄清楚,但是,嘿,這裏是六個,所以明天就會發生:) – astabada
我剛剛確認示例代碼生成了三頁文檔,每頁都有一個數字。 –
您必須自己將圖塊分成頁面並按照示例中所示編寫頁面。 matplotlib沒有自動分頁一系列子圖的功能。 –