5

このnp.arrayループの結果には、4383 行と 6 列があります。pylab.imshow()配列を表示するために matplotlib(pylab) から使用しようとしましたが、成功しませんでした。目的は、色のグラデーションが配列値の大きさを表す配列の画像を作成することです。配列の各行は、1 日 (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 に正規化します。colsrowsは列と行の数です (例: rows = data.shape[0]) cols = data.shape[1]

于 2012-10-12T00:09:30.423 に答える
5

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

ここに画像の説明を入力

于 2012-08-02T12:04:12.097 に答える
1

たぶん私は間違っていますが、あなたはまだ画像を転置するだけでimshowを使用することができます

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

plostは左下から始まるという下の言葉で、imshowのautoキーワード。しかし、私が言ったように、多分私は問題を理解していません

于 2012-08-02T12:45:40.567 に答える
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 に答える