tri
lat-lon grid ではないunstructured gridのmap描画は,contour, contourf, pcolor, pcolormesh では
おかしな図になってしまうけれど,matplotlib.triを使うことで正常な図を描画することができる.この描画では,一次元化された緯度経度とnumpy data array
lons=lons.ravel()
lats=lats.ravel()
npda=npda.ravel()
を使う.あらかじめ,matplotlib.triをimportしておく
import matplotlib.tri as tri
欠損値がない場合は,
ax=plt.subplot(2,2,1)
ax.tripcolor(lons,lats,npda)
で描画できる.欠損値がある場合は,trianglesをより明示的に扱う必要があり
# generate triangles
triang = tri.Triangulation(lons,lats)
# set mask for triangles
mask=np.zeros(triang.triangles[:,0].shape)
mask[np.isnan(npda[triang.triangles[:,0]])]=1
mask[np.isnan(npda[triang.triangles[:,1]])]=1
mask[np.isnan(npda[triang.triangles[:,2]])]=1
triang.set_mask(mask)
# set value for triangles
z=npda[triang.triangles]
z=(z[:,0]+z[:,1]+z[:,2])*0.33
# draw triangle with color
cs = ax.tripcolor(triang,z)
で描画することができる.
なお,basemapでは欠損値が無い場合には,contourfやpcolor でtri=Trueオプションをつけると,tripcolorを呼び出すことができる.欠損値がある場合には,pcolor でtri=Trueオプションをつけ,かつ引き渡すデータをnumpy masked arrayにするとtripcolorを呼び出して正常に描画ができる.欠損値がある場合に,basemapのcontourfでは描画はできないようだ.