長いプロットがあり、いくつかの水平サブプロットが列にまとめられています。Matplotlib savefigをPDFの別のページに貼り付けよう
fig.savefig( 'what.pdf')を呼び出すと、結果の出力ファイルには、すべてのプロットが1ページに詰め込まれて表示されます。
質問:savefigに任意の数のPDFファイルを保存するよう指示する方法はありますか?
可能であれば、複数のファイルとos.system( 'merge ...')を避けることをお勧めします。
長いプロットがあり、いくつかの水平サブプロットが列にまとめられています。Matplotlib savefigをPDFの別のページに貼り付けよう
fig.savefig( 'what.pdf')を呼び出すと、結果の出力ファイルには、すべてのプロットが1ページに詰め込まれて表示されます。
質問:savefigに任意の数のPDFファイルを保存するよう指示する方法はありますか?
可能であれば、複数のファイルとos.system( 'merge ...')を避けることをお勧めします。
私は自分自身を試していませんが、matplolib faqにはいくつかのページで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を生成しますが、まだ1つだけです。私はそれを理解する時間が必要ですが、ちょっとここでは6だから明日に起こるでしょう:) – astabada
サンプルコードが3ページの文書を作成し、各ページに1つの図が表示されていることが確認されました。 –
例に示すように、プロットをページに分割してページを書き込む必要があります。 matplotlibに一連のサブプロットを自動的にページ分割する機能はありません。 –