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