5

此循环产生的np.array结果有 4383 行和 6 列。我尝试使用pylab.imshow()matplotlib(pylab) 来显示数组,但没有成功。目标是创建数组的图像,其中颜色渐变表示数组值的大小。数组的每一行代表每天(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 轴倒置了,图像没有出现 在此处输入图像描述

这就是我需要的: 在此处输入图像描述

4

4 回答 4

9

如果您只是在调用它时设置了方面,则可以使用它。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])。

于 2012-10-12T00:09:30.423 回答
5

您需要使用pcolororpcolormesh代替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()

在此处输入图像描述

于 2012-08-02T12:04:12.097 回答
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() 
于 2012-08-02T11:48:26.553 回答
1

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

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

下面说plost从左下角开始,imshow中的auto关键字。但正如我所说,也许我不明白这个问题

于 2012-08-02T12:45:40.567 回答