it-swarm.com.de

Bilder nebeneinander mit Matplotlib plotten

Ich habe mich gefragt, wie ich Bilder mit matplotlib nebeneinander plotten kann, zum Beispiel so:

 enter image description here

Am nächsten habe ich Folgendes:

 enter image description here

Dies wurde mit diesem Code erstellt:

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, es muss einen besseren Weg geben, dies zu tun, da ich mir vorstellen könnte, dass der Versuch, die Indizes zu verwalten, ein Schmerz wäre. Ich habe die Dokumentation durchgesehen obwohl ich das Gefühl habe, ich könnte die falsche sehen. Kann mir jemand ein Beispiel geben oder in die richtige Richtung weisen? 

18
YellowPillow

Das Problem, dem Sie gegenüberstehen, besteht darin, dass Sie versuchen, zuweisen die Rückgabe von imshow (die ein matplotlib.image.AxesImage ist, an ein vorhandenes Achsenobjekt zu übergeben. 

Die korrekte Art, Bilddaten auf den verschiedenen Achsen in axarr zu zeichnen, wäre die

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 für alle Subplots gleich, und in den meisten Fällen stellt die Achseninstanz die gleichen Methoden bereit wie die Schnittstelle pyplot (plt). Z.B. Wenn ax eine Ihrer Subplot-Achsen ist, würden Sie zum Zeichnen eines normalen Liniendiagramms ax.plot(..) anstelle von plt.plot() verwenden. Dies ist tatsächlich genau in der Quelle von der Seite zu finden, auf die Sie mit verweisen. 

Sie zeichnen alle Ihre Bilder auf einer Achse. Sie möchten für jede Achse einen eigenen Griff bekommen und Ihre Bilder dort plotten. So wie:

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

Weitere Informationen finden Sie hier: http://matplotlib.org/examples/pylab_examples/subplots_demo.html

Bei komplexen Layouts sollten Sie die Verwendung von gridspec in Betracht ziehen: http://matplotlib.org/users/gridspec.html

12
Sven Festersen

Eine Sache, die ich sehr hilfreich fand:

_, axs = plt.subplots(n_row, n_col, figsize=(12, 12))
axs = axs.flatten()
for img, ax in Zip(imgs, axs):
    ax.imshow(img)
    plt.show()
0
YellowPillow