使用matplotlib.imshow绘制2D数组

时间:2012-08-02 11:40:39

标签: python matplotlib 2d

此循环产生的np.array有4383行和6列。我尝试使用matplotlib(pylab)中的pylab.imshow()来显示数组,但没有成功。目标是创建数组的图像,颜色渐变表示数组值的大小。阵列的每一行代表每天湖泊温度的深度变化(4383天)。因此,目标是在深度和时间上找到湖泊温度的差异。谢谢

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轴反转,图像不显示 enter image description here

这就是我需要的: enter image description here

4 个答案:

答案 0 :(得分: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])。

答案 1 :(得分:4)

您需要使用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

答案 2 :(得分:1)

您可以使用matplotlib.pyplot中的轴函数:

axis('auto')

所以你的例子会变成:

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

答案 3 :(得分:1)

也许我错了,但是你仍然可以使用imshow转换图像

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

较低的说法是从左下角开始,而在imshow中使用auto关键字。但正如我所说,也许我不明白这个问题