だから、約0.65
にほぼ0
の値の範囲のデータの束を含む6
層(array.size = (192,288,6)
)と緯度・経度のアレイを有する「POSXとPOSYは有限の値でなければなりません」。 6
層([:,:,0]
、[:,:,1]
など)のすべてのデータをプロットすると、問題はなく、素敵なマップが得られます([:,:,4]
を除く)。何らかの理由で、この2D配列をプロットしようとすると、わからないエラーメッセージが表示され、カラーバーをインクルードしようとすると表示されます。私はカラーバーをnixの場合はそこにはエラーはませんが、私はそのカラーバーを必要とする...
コード
ここで私は結果のプロットと一緒に、アレイの異なる部分に使用するコードです。 [:,:,5]
に行きましょう。
#Set labels
lonlabels = ['0','45E','90E','135E','180','135W','90W','45W','0']
latlabels = ['90S','60S','30S','Eq.','30N','60N','90N']
#Set cmap properties
bounds = np.array([0,0.001,0.01,0.05,0.1,0.2,0.3,0.4,0.5,0.6])
boundlabels = ['0','0.001','0.01','0.05','0.1','0.2','0.3','0.4','0.5','0.6']
cmap = plt.get_cmap('jet')
norm = colors.PowerNorm(0.35,vmax=0.65) #creates logarithmic scale
#Create basemap
fig,ax = plt.subplots(figsize=(15.,10.))
m = Basemap(projection='cyl',llcrnrlat=-90,urcrnrlat=90,llcrnrlon=0,urcrnrlon=360.,lon_0=180.,resolution='c')
m.drawcoastlines(linewidth=2,color='w')
m.drawcountries(linewidth=2,color='w')
m.drawparallels(np.arange(-90,90,30.),linewidth=0.3)
m.drawmeridians(np.arange(-180.,180.,45.),linewidth=0.3)
meshlon,meshlat = np.meshgrid(lon,lat)
x,y = m(meshlon,meshlat)
#Plot variables
trend = m.pcolormesh(x,y,array[:,:,5],cmap='jet',norm=norm,shading='gouraud')
#Set plot properties
#Colorbar
cbar=m.colorbar(trend, size='5%',ticks=bounds,location='bottom',pad=0.8)
cbar.set_label(label='Here is a label',size=25)
cbar.set_ticklabels(boundlabels)
for t in cbar.ax.get_xticklabels():
t.set_fontsize(25)
#Titles & labels
ax.set_title('Here is a title for [:,:,5]',fontsize=35)
ax.set_xlabel('Longitude',fontsize=25)
ax.set_xticks(np.arange(0,405,45))
ax.set_xticklabels(lonlabels,fontsize=20)
ax.set_yticks(np.arange(-90,120,30))
ax.set_yticklabels(latlabels,fontsize=20)
私はarray[:,:,4]
代わりのarray[:,:,5]
ためEXACT同じコードが、プロットを使用するときに今、私はこのエラーを取得します。
ValueError Traceback (most recent call last)
/linuxapps/anaconda/lib/python2.7/site-packages/IPython/core/formatters.pyc in __call__(self, obj)
305 pass
306 else:
--> 307 return printer(obj)
308 # Finally look for special method names
309 method = get_real_method(obj, self.print_method)
[lots of further traceback]
/linuxapps/anaconda/lib/python2.7/site-packages/matplotlib/text.pyc in draw(self, renderer)
755 posy = float(textobj.convert_yunits(textobj._y))
756 if not np.isfinite(posx) or not np.isfinite(posy):
--> 757 raise ValueError("posx and posy should be finite values")
758 posx, posy = trans.transform_point((posx, posy))
759 canvasw, canvash = renderer.get_canvas_width_height()
ValueError: posx and posy should be finite values
私は配列のプロットのすべての部分のコードがうまくいっていて、すべてが同じmeshgridを使用しているので、なぜこのようにしているのかわかりません。配列にはNaN
がありません。問題が消え、私はカラーバーコードを含むが1.0
(norm = colors.PowerNorm(1.0,vmax=0.65)
)にPowerNorm
を変更する場合:私はすべてのコードをコメントアウトした場合UPDATE
#Colorbar
間と
#Titles & labels
また、ここでの結果です。
1.0
以外のものは、カラーバーが含まれているときにエラーを生成します。
質問
posx
&
posy
エラーメッセージを引き起こしている可能性があり、そしてどのように私は私が含まカラーバーで、このプロットを行うことができますそれを取り除くことができますどのような
?
UPDATE
私は(私は0.65
にバインド0.6
を変更したことを除いて)同じコードで再び、ゼロからカーネルを実行すると、私はarray[:,:,4]
ブロックで次の警告を取得します。彼らが関係しているかどうかは分かりませんが、場合によってはそれらを含めることにします。
/linuxapps/anaconda/lib/python2.7/site-packages/matplotlib/colors.py:1202: RuntimeWarning: invalid value encountered in power
np.power(resdat, gamma, resdat)
[<matplotlib.text.Text at 0x2af62c8e6710>,
<matplotlib.text.Text at 0x2af62c8ffed0>,
<matplotlib.text.Text at 0x2af62cad8e90>,
<matplotlib.text.Text at 0x2af62cadd3d0>,
<matplotlib.text.Text at 0x2af62caddad0>,
<matplotlib.text.Text at 0x2af62cae7250>,
<matplotlib.text.Text at 0x2af62cacd050>]
/linuxapps/anaconda/lib/python2.7/site-packages/matplotlib/axis.py:1015: UserWarning: Unable to find pixel distance along axis for interval padding of ticks; assuming no interval padding needed.
warnings.warn("Unable to find pixel distance along axis "
/linuxapps/anaconda/lib/python2.7/site-packages/matplotlib/axis.py:1025: UserWarning: Unable to find pixel distance along axis for interval padding of ticks; assuming no interval padding needed.
warnings.warn("Unable to find pixel distance along axis "
。 'np.isfinite(array [:、:、、4])'はあなたに何を表示しますか? array [:、:、4]の最小値と最大値を調べることができますか?すなわち、あなたの 'boundlabels'は実際にそのスライスのデータ内にありますか?等。 – Ajean
"np.where(np.isfinite(lintrends [=、:、4])== False)を出力すると配列の位置は返されないので、すべてのデータが有限です。 np.max = 0.613478607374およびnp.min = 4.4408920985e-15であり、したがって、すべてのデータは0と0.65の間にある。 (境界線の0.6を0.65に変更しても、同じエラーが表示されます) – ChristineB