2015-04-01 14 views
7

Given wizerunek nieznanej wielkości co wejście następujący python skrypt pokazuje mu 8 razy w ciągu jednego pdf stronie:matplotlib wykazują wiele obrazów w jeden plik PDF stronie

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

Wejście obraz może mieć różne rozmiary (nieznane apriorycznie). Próbowałem użyć funkcji gs.update(wspace=xxx, hspace=xxx), aby zmienić odstępy pomiędzy obrazami, mając nadzieję, że zmienią one rozmiar i rozpowszechnią obrazy tak, aby uzyskać możliwie najmniejszą białą przestrzeń. Jednak, jak widać poniżej, nie działało tak, jak się spodziewałem.

Czy istnieje lepszy sposób na osiągnięcie następujących celów?

  1. Czy obrazy zapisane z max rozdzielczości możliwej
  2. mając mniej białą przestrzeń możliwą

Idealnie chciałabym 8 obrazów całkowicie będzie wielkość strona pdf (z minimalną ilością wymagany margines).

enter image description here

enter image description here

+0

Czy moja odpowiedź rozwiązuje Twój problem? – hitzg

+0

@hitzg - Tak, tak! Czekałem na trochę więcej opinii, ale potem zupełnie zapomniałem zaakceptować. Przepraszam! – Matteo

Odpowiedz

12

Byłaś na dobrej drodze: hspace i wspace kontroli przestrzenie pomiędzy obrazami. Można również kontrolować marginesy na rysunku z top, bottom, left i 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() 

Wynik:

enter image description here

Jeśli chcesz, aby Twoje zdjęcia naprawdę pokryć całą dostępną przestrzeń, a następnie można ustawić współczynnik kształtu na automatyczny:

ax.set_aspect('auto') 

Wynik t:

enter image description here

Powiązane problemy