pcolor (tri=True)
basemapでは欠損値が無い場合には,contourfやpcolor でtri=Trueオプションをつけると,tripcolorを呼び出すことができる.欠損値がある場合には,pcolor でtri=Trueオプションをつけ,かつ引き渡すデータをnumpy masked arrayにするとtripcolorを呼び出して正常に描画ができる.欠損値がある場合に,basemapのcontourfでは描画はできないようだ.
mport xarray as xr
import numpy as np
import numpy.ma as ma
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import matplotlib.tri as tri
# fn='/data/CMIP5/lnk_nc_xyzt/MIROC5/zos.hist.Omon2D/zos_Omon_MIROC5_historical_r1i1p1_185001-201212.nc'
fn='/data/CMIP5/lnk_nc_xyzt/ACCESS1-0/zos.hist.Omon2D/zos_Omon_ACCESS1-0_historical_r1i1p1_185001-200512.nc'
xrds=xr.open_dataset(fn)
xrdt=xrds['zos']
lats_np=np.array(xrds.coords['lat']) # 2D array, because of unstructured grid
lons_np=np.array(xrds.coords['lon'])
npda=np.array(xrdt.isel(time=slice(0,1)))
tsz,ysz,xsz=npda.shape
npda=npda.reshape(ysz,xsz)
mask=np.zeros(npda.shape)
mask[np.isnan(npda)]=1
mask_bool=mask==1
npma=ma.masked_array(data=npda,mask=mask)
plt.ion()
map = Basemap(projection='cyl',llcrnrlat=-90.0,urcrnrlat=90.0, \
llcrnrlon=0.,urcrnrlon=360.01,resolution='c') #Equidistant CYlindrical Projection
x, y = map(lons_np, lats_np)
x=x.ravel() # necessary to make x & y as one dimension
y=y.ravel()
cs = map.pcolor(x,y,npma,tri=True)
plt.title('Basemap.pcolor with tri=True option')
plt.colorbar(cs)
map.drawcoastlines(linewidth=0.25)
map.drawmeridians(np.arange(0,390,30))
map.drawparallels(np.arange(-90,90,30))
plt.savefig('fig_unstructured_Basemap_withnan')