Matplotlib savefig на разные страницы PDF файла

У меня длинный сюжет, состоящий из нескольких горизонтальных подстроек, организованных в столбец.

Когда я вызываю fig.savefig('what.pdf'), результирующий выходной файл показывает все графики, переполненные на одну страницу.

Вопрос: есть ли способ сказать savefig для сохранения на любом количестве (возможно, автоматически определяемом) страниц PDF?

Я бы предпочел избежать нескольких файлов, а затем os.system('merge...'), если это возможно.

Ответ 2

Я подозреваю, что есть более элегантный способ сделать это, но один из вариантов - использовать tempfiles или StringIO, чтобы избежать создания традиционных файлов в системе, а затем вы можете объединить их.

Ответ 3

Мне было интересно, как выполнить подобную вещь. У меня есть набор графиков из разных файлов изображений, которые различаются в зависимости от файла. Таким образом, идея состоит в том, что, когда я нахожу красивое количество графиков, которые могут быть нанесены на страницу, примените это для файлов. К счастью, я нашел решение, предложенное здесь: 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'

Page1

Page2