matplotlib在单个pdf页面中显示许多图像

时间:2015-04-01 02:52:49

标签: python image pdf matplotlib

如果输入的图像大小未知,则以下python脚本会在单个pdf页面中显示8次:

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能够自动调整大小并重新分配图像以获得最小的空白区域。但是,正如您在下面看到的那样,它并没有像我预期的那样发挥作用。

  

有没有更好的方法来实现以下目标?

  1. 以最大分辨率保存图像
  2. 可用空间更少
  3. 理想情况下,我希望8张图片完全符合pdf的页面大小(需要最少的保证金金额)。

    enter image description here

    enter image description here

1 个答案:

答案 0 :(得分:13)

您走在正确的道路上:hspacewspace控制图像之间的空间。您还可以使用topbottomleftright控制图上的边距:

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

结果:

enter image description here

如果您希望图像真正覆盖所有可用空间,则可以将宽高比设置为自动:

ax.set_aspect('auto')

结果:

enter image description here