matplotlib показать много изображений в одной странице pdf
учитывая изображение неизвестного размера в качестве входных данных, следующее python
скрипт показывает его 8 раз в одном pdf
страницы:
pdf = PdfPages( './test.pdf' )
gs = gridspec.GridSpec(2, 4)
ax1 = plt.subplot(gs[0])
ax1.imshow( _img )
ax2 = plt.subplot(gs[1])
ax2.imshow( _img )
ax3 = plt.subplot(gs[2])
ax3.imshow( _img )
# so on so forth...
ax8 = plt.subplot(gs[7])
ax8.imshow( _img )
pdf.savefig()
pdf.close()
входное изображение может иметь разный размер (неизвестно априори). Я попытался использовать функцию gs.update(wspace=xxx, hspace=xxx)
чтобы изменить расстояние между изображениями, надеясь, что matplotlib
будет автоматически изменять размер и распространять изображения, чтобы иметь наименьшее возможное пространство. Однако, как вы можете видеть ниже, это не сработало, как я ожидал.
Is есть лучший способ добиться следующего?
- есть изображения, сохраненные с максимальным разрешением можно
- есть меньше свободного пространства возможно
В идеале я хотел бы, чтобы 8 изображений полностью будет размер страницы pdf
(с минимальным количеством необходимой маржи).
1 ответов
Вы были на правильном пути: hspace
и wspace
управление пробелами между изображениями. Вы также можете управлять полями на рисунке с помощью top
, bottom
, left
и right
:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import matplotlib.image as mimage
from matplotlib.backends.backend_pdf import PdfPages
_img = mimage.imread('test.jpg')
pdf = PdfPages( 'test.pdf' )
gs = gridspec.GridSpec(2, 4, top=1., bottom=0., right=1., left=0., hspace=0.,
wspace=0.)
for g in gs:
ax = plt.subplot(g)
ax.imshow(_img)
ax.set_xticks([])
ax.set_yticks([])
# ax.set_aspect('auto')
pdf.savefig()
pdf.close()
результат:
если вы хотите, чтобы ваши изображения действительно охватывали все доступное пространство, вы можете установить соотношение сторон в auto:
ax.set_aspect('auto')
результат: