此循环产生的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轴反转,图像不显示
这就是我需要的:
答案 0 :(得分:8)
如果您在调用时设置方面,可以使用imshow
。如下:
im = plt.imshow(tem, cmap='hot', aspect=aspect_ratio*(cols/rows))
其中aspect_ratio
这里会设置您想要的实际宽高比,cols/rows
只是将原始宽高比标准化为1. cols
和rows
是列数和行(例如rows = data.shape[0]
,cols = data.shape[1]
)。
答案 1 :(得分:4)
您需要使用pcolor
或pcolormesh
代替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()
答案 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关键字。但正如我所说,也许我不明白这个问题