2017-01-22 45 views
9

我想知道我是如何使用matplotlib例如像這樣繪製並排圖像並排繪製圖像的一面:使用matplotlib

enter image description here

我得到的最接近是這樣的:

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

enter image description here

這是通過使用由此代碼生成

但我似乎無法得到其他圖像顯示。我在想,必須有更好的方法來做到這一點,因爲我會想象試圖管理索引將是一個痛苦。我已經瀏覽了documentation,雖然我有一種感覺,我可能會看錯了。任何人都可以爲我提供一個例子,或者指引我走向正確的方向嗎?

+0

也許這是有幫助的:Python和Matplotlib,繪製不規則網格](http://stackoverflow.com/questions/41644180/python-matplotlib-plotting-irregular-grid/41644458#41644458) – Lucas

+0

看看[示例說明使用'plt.subplots()'](http:///matplotlib.org/examples/pylab_examples/subplots_demo.html)。 – Goyo

回答

11

你所面臨的問題是,你嘗試分配imshow返回(這是一個matplotlib.image.AxesImage到現有的軸對象。

axarr圖像數據繪製的不同軸將是正確的方法

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

概念對於所有副區是相同的,並且在大多數情況下,軸實例提供比pyplot(PLT)接口相同的方法。 例如,如果ax是一個繪製正常線條圖,您將使用ax.plot(..)而不是plt.plot()。這實際上可以在the page you link to的源中找到。

7

您正在一個座標軸上繪製所有圖像。你想要的是單獨獲取每個軸的句柄並在那裏繪製你的圖像。像這樣:

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

欲瞭解更多信息看看這裏:http://matplotlib.org/examples/pylab_examples/subplots_demo.html

對於複雜的佈局,你應該考慮使用gridspec:http://matplotlib.org/users/gridspec.html