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では描画はできないようだ.