2012-08-02 140 views
4

由此循環產生的np.array具有4383行和6列。我試過沒有成功使用matplotlib(pylab)中的pylab.imshow()來顯示數組。目標是創建數組的圖像,顏色梯度表示數組值的大小。陣列的每一行表示每天(4383天)湖溫變化的深度。因此,目的是發現深度和時間上的湖泊溫度差異。謝謝用matplotlib.imshow繪製二維數組

TempLake=np.zeros((N+1,Nlayers)) 
TempLake[0]=T0 

Q=np.zeros(N+1) 
Q[0]=0.0 
for i in xrange(N): 
    Q[i+1]=Qn(HSR[i],TD[i],FW[i],TempLake[i][0]) 
    TempLake[i+1]=main_loop(Z,z,Areat0,Areat1,TempLake[i],wind[i],Q[i],Q[i+1]) 


im = plt.imshow(tem, cmap='hot') 
plt.colorbar(im, orientation='horizontal') 
plt.show() 

這是結果:傳說是好的,但在x軸反轉和圖像doesn't出現 enter image description here

這就是我需要: enter image description here

回答

3

您需要使用pcolorpcolormesh代替imshow。這是因爲在imshow圖的方面是相同的數組,在你的情況是4383x6。

import pylab as plt 
import numpy as np 


Z=np.array((range(1,30),range(31,60),range(61,90))).transpose() 

X,Y=np.meshgrid(range(Z.shape[0]+1),range(Z.shape[1]+1)) 
im = plt.pcolormesh(X,Y,Z.transpose(), cmap='hot') 
plt.colorbar(im, orientation='horizontal') 
plt.show() 

enter image description here

0

可以使用軸功能從matplotlib.pyplot:

axis('auto') 

所以,你會爲例BECO我:

TempLake=np.zeros((N+1,Nlayers)) 
TempLake[0]=T0 

Q=np.zeros(N+1) 
Q[0]=0.0 
for i in xrange(N): 
    Q[i+1]=Qn(HSR[i],TD[i],FW[i],TempLake[i][0]) 
    TempLake[i+1]=main_loop(Z,z,Areat0,Areat1,TempLake[i],wind[i],Q[i],Q[i+1]) 

im = plt.imshow(tem, cmap='hot') 
plt.colorbar(im, orientation='horizontal') 
plt.axis('auto') 
plt.show() 
+0

你能給我一個例子,我找不到這個函數 – user1419224 2012-08-02 11:58:24

1

也許我錯了,但對於你仍然可以使用imshow只是調換圖像

im = plt.imshow(tem.transpose(),cmap='hot',origin='lower',aspect='auto') 

較低的話說,從底部開始plost左,汽車imshow中的關鍵字。但正如我所說,也許我不明白這個問題

+0

不,在'imshow'中圖的方面是數組相關的,所以'轉置'只會旋轉90度。 – imsc 2012-08-03 10:40:39

+0

這對我來說工作得很好。 – maurobio 2017-10-05 12:58:47

8

可以使用imshow如果你只是設置方面,當你調用它。具體如下:

im = plt.imshow(tem, cmap='hot', aspect=aspect_ratio*(cols/rows)) 

其中aspect_ratio這裏將設置實際的縱橫比你想和cols/rows只是標準化的原始寬高比爲1 colsrows的行和列的數字(如rows = data.shape[0]cols = data.shape[1])。

+0

如果你不想手動進行計算,你也可以使用'aspect =「auto」''來爲你做這項工作,試圖讓圖像適合這個數字。 – jadsq 2017-06-01 12:46:21