2012-08-02 56 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