2017-01-22 4 views
9

Ich frage mich, wie ich in der Lage bin Bilder nebeneinander zeichnen:Plotten Seite Bilder an Seite mit matplotlib

enter image description here

Die nächstgelegene ich habe, ist dies:

enter image description here

Dies wurde durch diesen Code erzeugt:

f, axarr = plt.subplots(2,2) 
axarr[0,0] = plt.imshow(image_datas[0]) 
axarr[0,1] = plt.imshow(image_datas[1]) 
axarr[1,0] = plt.imshow(image_datas[2]) 
axarr[1,1] = plt.imshow(image_datas[3]) 

Aber ich kann nicht scheinen, die anderen Bilder zu zeigen. Ich denke, dass es einen besseren Weg geben muss, dies zu tun, da ich mir vorstelle, dass der Versuch, die Indizes zu verwalten, ein Schmerz sein würde. Ich habe durch die documentation geschaut, obwohl ich das Gefühl habe, dass ich mir die falsche anschaue. Kann mir jemand ein Beispiel geben oder in die richtige Richtung weisen?

+0

vielleicht ist hilfreich: [Python, Matplotlib, Plotten unregelmäßige Gitter ] (http://stackoverflow.com/questions/41644180/python-matplotlib-plotting-irregular-grid/41644458#41644458) – Lucas

+0

Sehen Sie sich die [Beispiele für die Verwendung von 'pltplots()'] (http://matplotlib.org/examples/pylab_examples/subplots_demo.html). – Goyo

Antwort

11

Das Problem, das Sie Gesicht ist, dass Sie zuweisen die Rückkehr von imshow versuchen (die eine matplotlib.image.AxesImage zu einem vorhandenen Achsen. Objekt

Der korrekte Weg, um Bilddaten zu den verschiedenen Achsen in axarr Plotten wäre

f, axarr = plt.subplots(2,2) 
axarr[0,0].imshow(image_datas[0]) 
axarr[0,1].imshow(image_datas[1]) 
axarr[1,0].imshow(image_datas[2]) 
axarr[1,1].imshow(image_datas[3]) 

das Konzept ist das gleiche für alle Teilflächen, und in den meisten Fällen die Achsen beispielsweise die gleichen Methoden als die pyplot (PLT) Schnittstelle bereitzustellen. Eg wenn ax ist Ihrer Nebenachsen, zum Zeichnen eines normalen Liniendiagramms würden Sie ax.plot(..) anstelle von plt.plot() verwenden. Dies kann tatsächlich genau in der Quelle von the page you link to gefunden werden.

7

Sie zeichnen alle Ihre Bilder auf einer Achse. Was Sie wollen, ist ein Griff für jede Achse einzeln zu bekommen und Ihre Bilder dort zu plotten. Wie so:

fig = plt.figure() 
ax1 = fig.add_subplot(2,2,1) 
ax1.imshow(...) 
ax2 = fig.add_subplot(2,2,2) 
ax2.imshow(...) 
ax3 = fig.add_subplot(2,2,3) 
ax3.imshow(...) 
ax4 = fig.add_subplot(2,2,4) 
ax4.imshow(...) 

Für weitere Informationen einen Blick hier: http://matplotlib.org/examples/pylab_examples/subplots_demo.html

Für komplexe Layouts, sollten Sie prüfen, mit gridspec: http://matplotlib.org/users/gridspec.html