def myplot(vari, depi, varol, varoc, depo, figfile): def getdv(var, dep): v = var[1, :, 1, :] if dep[:].ndim==var.ndim: dep = dep[1, :, 1, :] elif dep[:].ndim==3: dep = dep[:, 1, :] xb, yb = meshcells(v.getAxis(-1), dep) return xb, yb, v.asma() xbi, ybi, vi = getdv(vari, depi) xbo, ybo, vol = getdv(varol, depo) _, _, voc = getdv(varoc, depo) vmin, vmax = minmax(vi, vol, voc) kw = dict(vmin=vmin, vmax=vmax) P.figure(figsize=(10, 4)) ax = P.subplot(131) P.pcolormesh(xbi, ybi, vi, **kw) P.title('Original') P.subplot(132, sharex=ax, sharey=ax) P.pcolormesh(xbo, ybo, vol, **kw) P.title('Linear') P.subplot(133, sharex=ax, sharey=ax) P.pcolormesh(xbo, ybo, voc, **kw) P.ylim(ymin=min(ybi.min(), ybo.min()), ymax=max(ybi.max(), ybo.max())) P.title('Cellave') P.tight_layout() P.savefig(figfile)
def plot(xx, yy, target, label, figfiles, figfile, lon=None, lat=None, show=False): xs, ys, mask = coord2slice(target, lon=lon, lat=lat) P.figure(figsize=(6, 3.5)) P.title('Target=%(label)s / select: lon=%(lon)s, lat=%(lat)s'%locals()) add_grid((xx, yy)) xx = xx.asma() yy = yy.asma() if isinstance(lon, tuple): P.axvline(lon[0], color='m', ls='--', lw=2) P.axvline(lon[1], color='m', ls='--', lw=2) elif isinstance(lon, slice): i, j, k = lon.indices(xx.shape[1]) P.plot(xx[:, i], yy[:, i], 'c--', lw=2) P.plot(xx[:, j-1], yy[:, j-1], 'c--', lw=2) if isinstance(lat, tuple): P.axhline(lat[0], color='m', ls='--', lw=2) P.axhline(lat[1], color='m', ls='--', lw=2) elif isinstance(lat, slice): i, j, k = lat.indices(yy.shape[0]) P.plot(xx[i], yy[i], 'c--', lw=2) P.plot(xx[j-1], yy[j-1], 'c--', lw=2) P.xticks(N.arange(xx.min()-1, xx.max()+1)) P.yticks(N.arange(yy.min()-1, yy.max()+1)) xxi, yyi = xx, yy xx = xx[ys, xs] yy = yy[ys, xs] # mask = mask[ys, xs] xxb, yyb = meshbounds(xx, yy) P.pcolor(xxb, yyb, mask, shading='faceted') P.scatter(xx.ravel(), yy.ravel(), c=(0, 1, 0)) P.grid('on') P.axis('image') P.tight_layout() i = len(figfiles) savefig = figfile%i if os.path.exists(savefig): os.remove(savefig) P.savefig(savefig) figfiles.append(savefig) if show: P.show() else: P.close()
continue if rank==0: print >>f, tool.upper(), method, ':', '%5.1f'%(time()-t0), 'seconds', psinfo() frac = diag['dstAreaFractions'] if frac is not None: mask = frac<=1.e-3 frac[mask] = 1. frac = N.resize(frac, varo.shape) mask = N.resize(mask, varo.shape) varo[:] /= frac varo[:] = MV2.masked_where(mask, varo, copy=0) # del r gc.collect() if rank==0: print >>f, ' plot' P.figure(figsize=(12, 6)) P.subplots_adjust(right=0.9) P.subplot(121) P.pcolormesh(xi, yi, vari[0,0].asma(),vmin=vmin,vmax=vmax) P.axis([xmin, xmax, ymin, ymax]) P.colorbar() P.title('Original') P.subplot(122) P.pcolormesh(xo, yo, varo[0,0].asma(),vmin=vmin,vmax=vmax) P.axis([xmin, xmax, ymin, ymax]) P.title(tool.upper()+' / '+method.upper()) P.colorbar(extend='min')#cax=P.axes([0.92, 0.3, 0.02, 0.6])) figfile = basefile+'_%(tool)s_%(method)s.png'%vars() if os.path.exists(figfile): os.remove(figfile) P.savefig(figfile) P.close()
cmap_name = "CMRmap" cmap_old = P.get_cmap(cmap_name) # Max cmap_10 = desaturate(cmap_old, 1) # Medium cmap_05 = desaturate(cmap_old, 0.5) # Min cmap_00 = desaturate(cmap_old, 0) # Plot fig = P.figure(figsize=(6, 2)) kw = dict(fig=fig, figsize=None, aspect=.15, show=False, close=False) P.subplot(221) plot_cmap(cmap_old, title='Original', **kw) P.subplot(222) plot_cmap(cmap_00, title='f = 0.0', **kw) P.subplot(223) plot_cmap(cmap_05, title='f = 0.5', **kw) P.subplot(224) plot_cmap(cmap_10, title='f = 1.0', **kw) P.tight_layout() P.figtext(.5, 1, 'Desaturate '+cmap_name, va='top', ha='center', size=12) P.savefig(code_file_name(ext='png')) P.close()
vari[int(nyi*0.4):int(nyi*0.4)+3, int(nxi*0.4):int(nxi*0.4)+2] = N.ma.masked xxib, yyib = meshcells(xi, yi) nxo = 40 nyo = 25 xo = N.linspace(int(nxi*0.2),int(nxi*1.2),nxo) yo = N.linspace(int(-nyi*0.2),int(nyi*0.8),nyo) xxob, yyob = meshcells(xo, yo) vari.shape = (1, )+vari.shape varo = N.ma.masked_values(dstwgt(vari.filled(), xi, yi, xo, yo, mv, 0), mv) kw = dict(vmin=vari.min(), vmax=vari.max()) axlims = [min(xi.min(), xo.min()), max(xi.max(), xo.max()), min(yi.min(), yo.min()), max(yi.max(), yo.max())] P.figure(figsize=(8, 4)) P.subplot(211) P.pcolor(xxib, yyib, vari[0], **kw) P.axis(axlims) P.title('Original') P.subplot(212) P.pcolor(xxob, yyob, varo[0], **kw) P.axis(axlims) P.title('Distance weight') P.tight_layout() figfile = code_file_name(ext='png') if os.path.exists(figfile): os.remove(figfile) P.savefig(figfile) P.show() P.close()
"""Test function :func:`~vacumm.misc.grid.kriging.cloud_split`""" nps = [100, 60, 40] npmax = 90 dxy = 5 from vcmq import P, simple_colors, savefigs, code_file_name, N from vacumm.misc.grid.kriging import cloud_split # Input clouds xx = [] yy = [] P.figure(figsize=(7, 3.5)) P.subplot(121, aspect=1) colors = simple_colors[1:] for i, np in enumerate(nps): xc = P.rand(1)*dxy*2.5 yc = P.rand(1)*dxy*2.5 x = P.rand(np)*dxy+xc y = P.rand(np)*dxy+yc xx.extend(x) yy.extend(y) P.scatter(x, y, c=colors[i:i+1], s=40) P.title('Original (mixed clouds)') # Spliting indices, centroids = cloud_split(xx, yy, getdist=False, getcent=True, npmax=npmax) # Plot P.subplot(122, aspect=1) xx = N.array(xx)
create_time, CurvedInterpolator, rotate_grid) # Curved grid nxy = 10 nt = 5 lon = N.arange(nxy * 1.) lat = N.arange(nxy * 1.) time = create_time((nt, ), 'years since 2000') gridi = rotate_grid((lon, lat), 30) xxi = gridi.getLongitude()[:].filled() yyi = gridi.getLatitude()[:].filled() vari = MV2.resize(yyi, (nt, nxy, nxy)) vari.setAxis(0, time) set_grid(vari, gridi) kw = dict(vmin=vari.min(), vmax=vari.max()) P.figure(figsize=(10, 3.5)) P.subplot(131, aspect=1) P.contourf(xxi, yyi, vari[0].asma(), **kw) add_grid(gridi, edges=False, centers=-1) xylims = (xxi.min(), xxi.max(), yyi.min(), yyi.max()) P.axis(xylims) P.title('Curved grid') # Interpolate to grid xg, yg = N.meshgrid(N.arange(-3.5, 14.5), N.arange(-3.5, 14.5)) nxyg = xg.shape cig = CurvedInterpolator(gridi, (xg, yg), g2g=True) varog = cig(vari) P.subplot(132, aspect=1) P.scatter(xg, yg, c=varog[0].asma(), s=120, linewidth=0, **kw) add_grid(gridi, edges=False, centers=-1)
nb = 10 xxbi, yybi = meshbounds(xxi, yyi) # Output grid grido = rotate_grid((N.linspace(0, 6, 50) - 1, N.linspace(0, 4, 35) + 1.), -20) xxo = grido.getLongitude()[:].filled() yyo = grido.getLatitude()[:].filled() xxbo, yybo = meshbounds(xxo, yyo) # Nearest varo = nearest2d(vari, xxi, yyi, xxo, yyo, nb) # Plot vmin = varo.min() vmax = varo.max() P.figure(figsize=(8, 4)) P.subplot(121, aspect=1) P.pcolor(xxbi, yybi, vari[0], vmin=vmin, vmax=vmax) add_grid(grido) P.title('original') P.subplot(122, aspect=1) P.pcolor(xxbo, yybo, varo[0], vmin=vmin, vmax=vmax) add_grid(gridi) P.title('nearest2d') P.axis('image') figfile = code_file_name(ext='png') if os.path.exists(figfile): os.remove(figfile) P.savefig(figfile) P.show() P.close()
"""Test function :func:`~vacumm.misc.grid.kriging.cloud_split`""" nps = [100, 60, 40] npmax = 90 dxy = 5 from vcmq import P, simple_colors, savefigs, code_file_name, N from vacumm.misc.grid.kriging import cloud_split # Input clouds xx = [] yy = [] P.figure(figsize=(7, 3.5)) P.subplot(121, aspect=1) colors = simple_colors[1:] for i, np in enumerate(nps): xc = P.rand(1) * dxy * 2.5 yc = P.rand(1) * dxy * 2.5 x = P.rand(np) * dxy + xc y = P.rand(np) * dxy + yc xx.extend(x) yy.extend(y) P.scatter(x, y, c=colors[i:i + 1], s=40) P.title('Original (mixed clouds)') # Spliting indices, centroids = cloud_split(xx, yy, getdist=False, getcent=True, npmax=npmax)
diag = {'dstAreaFractions':None} varo = vari.regrid(grido, tool='esmf', method='conservative', diag=diag, coordSys='cart') # Norm frac = diag['dstAreaFractions'] mask = frac==0. frac[mask]=1. varo[:] /= frac varo[:] = MV2.masked_where(mask, varo, copy=0) # Plot rc('font', size=9) kw = dict(vmin=vari.min(), vmax=vari.max()) axis = [xxbi.min(), xxbi.max(), yybo.min(), yybo.max()] P.figure(figsize=(7, 3)) P.subplot(121, aspect=1) P.pcolormesh(xxbi, yybi, vari, **kw) P.colorbar(shrink=0.7) add_grid(gridi, color='0.5') add_grid(grido) P.axis(axis) P.title('Original: max=%g min=%g'%(vari.max(), vari.min())) P.subplot(122, aspect=1) P.pcolormesh(xxbo, yybo, varo, **kw) P.colorbar(shrink=0.7) add_grid(gridi) add_grid(grido, color='0.5') P.axis(axis) P.title('Regridded: max=%g min=%g'%(varo.max(), varo.min())) P.tight_layout()
from vacumm.misc.grid.misc import rotate_grid from vacumm.misc.grid.regridding import CurvedInterpolator from vcmq import P, N, set_grid, plot2d, MV2, add_grid, code_file_name, os # Curved grid nxy = 10 lon = N.arange(nxy*1.) lat = N.arange(nxy*1.) gridi = rotate_grid((lon, lat), 30) xxi = gridi.getLongitude()[:].filled() yyi = gridi.getLatitude()[:].filled() vari = MV2.array(yyi) set_grid(vari, gridi) kw = dict(vmin=vari.min(), vmax=vari.max()) P.figure(figsize=(10, 3.5)) P.subplot(131, aspect=1) P.contourf(xxi, yyi, vari.asma(), **kw) add_grid(gridi, edges=False, centers=-1) xylims = (xxi.min(), xxi.max(), yyi.min(), yyi.max()) P.axis(xylims) P.title('Curved grid') # Interpolate to grid xg, yg = N.meshgrid(N.arange(-3.5, 14.5), N.arange(-3.5, 14.5)) nxyg = xg.shape cig = CurvedInterpolator(gridi, (xg, yg), g2g=True) varog = cig(vari) P.subplot(132, aspect=1) P.scatter(xg, yg, c=varog.asma(), s=120, linewidth=0, **kw) add_grid(gridi, edges=False, centers=-1)
# Generate random field xg, yg, zzg = gridded_gauss3() xi, yi, zi = random_gauss3(np=npi) # Interpolate to random points xo, yo = random_points(np=npo) zo = krig(xi, yi, zi, xo, yo) # Plot # - source data axis = [xg.min(), xg.max(), yg.min(), yg.max()] kw = dict(vmin=zzg.min(), vmax=zzg.max()) kwim = dict(extent=axis, interpolation='bilinear', origin='lower', alpha=.2, **kw) kwsc = dict(lw=0.2, **kw) P.figure(figsize=(6, 3.5)) P.subplot(121) P.title('Source field') P.imshow(zzg, **kwim) P.scatter(xi, yi, c=zi, **kwsc) P.axis(axis) # - interpolated data P.subplot(122) P.title('Interpolated points') P.imshow(zzg, **kwim) P.scatter(xo, yo, c=zo, marker='s', s=30, **kwsc) P.axis(axis) P.tight_layout() savefigs(code_file_name(), verbose=False) P.close()
xg, yg, zzg = gridded_gauss3() xi, yi, zi = random_gauss3(np=npi) zi = N.vstack((zi, zi)) # simulate several time steps for multifit # Init kriger kriger = OrdinaryCloudKriger(xi, yi, zi, npmax=npmax, nproc=nproc) # Output points xo, yo = random_points(np=npo) # Interpolate t0 = time() zo = kriger(xo, yo) # Plot P.figure(figsize=(6, 8)) axis = [xg.min(), xg.max(), yg.min(), yg.max()] kw = dict(vmin=zi.min(), vmax=zi.max()) kwim = dict(extent=axis, interpolation='bilinear', origin='lower', alpha=.2, **kw) kwsc = dict(lw=0.2, **kw) P.subplot(211) P.imshow(zzg, **kwim) P.scatter(xi, yi, c=zi if zi.ndim==1 else zi[0], s=20, **kwsc) P.title('Input points') P.subplot(212) P.imshow(zzg, **kwim) P.scatter(xo, yo, c=zo if zo.ndim==1 else zo[0], s=40, **kwsc) P.title('Interpolated points') P.tight_layout() savefigs(code_file_name(), verbose=False) P.close()
dyo = (yo[1] - yo[0]) * 0.49 yyi = N.resize(yi, vari.shape) + N.random.uniform(-dyi, dyi, vari.shape) yyo = N.resize(yo, (nx, len(yo))) + N.random.uniform(-dyo, dyo, (nx, len(yo))) yyib, xxib = meshcells(yyi, x) yyob, xxob = meshcells(yyo, x) varon = N.ma.masked_values( interp1dxx(vari.filled(), yyi, yyo, mv, 0, extrap=0), mv) varol = N.ma.masked_values( interp1dxx(vari.filled(), yyi, yyo, mv, 1, extrap=0), mv) varoh = N.ma.masked_values( interp1dxx(vari.filled(), yyi, yyo, mv, 3, extrap=0), mv) kw = dict(vmin=vari.min(), vmax=vari.max()) axlims = [x[0], x[-1], yo[0], yo[-1]] P.figure(figsize=(8, 8)) P.subplot(221) P.pcolor(xxib, yyib, vari) P.axis(axlims) P.title('Original') P.subplot(222) P.pcolor(xxob, yyob, varon, **kw) P.axis(axlims) P.title('Nearest1dxx') P.subplot(223) P.pcolor(xxob, yyob, varol, **kw) P.axis(axlims) P.title('Linear1dxx') P.subplot(224) P.pcolor(xxob, yyob, varoh, **kw) P.axis(axlims)
yi = N.arange(nxy * 1.) gridi = rotate_grid((xi, yi), 30) xxi = gridi.getLongitude().getValue() yyi = gridi.getLatitude().getValue() zzi = N.ma.array(yyi) zzi[int(nxy * 0.3):int(nxy * 0.8), int(nxy * 0.3):int(nxy * 0.8)] = N.ma.masked zzi.shape = 1, nxy, nxy # Output positions no = 1000 xo = N.random.uniform(-nxy / 4., nxy + nxy / 4., no) yo = N.random.uniform(-nxy / 4., nxy + nxy / 4., no) # Interpolate mv = zzi.get_fill_value() zo = nearest2dto1dc(xxi, yyi, zzi.filled(mv), xo, yo, mv) zo = N.ma.masked_values(zo, mv) # Plot kw = dict(vmin=zzi.min(), vmax=zzi.max()) P.figure(figsize=(6, 6)) P.subplot(111, aspect=1) P.contourf(xxi, yyi, zzi[0], **kw) add_grid((xxi, yyi), edges=False, centers=True, marker='o') P.scatter(xo, yo, c=zo[0], s=50, **kw) P.title('nearest2dto1dc') figfile = code_file_name(ext='png') if os.path.exists(figfile): os.remove(figfile) P.savefig(figfile) P.close()
"""Test the :func:`~vacumm.misc.grid.masking.create_polygon` function""" from vcmq import N, P, create_polygon, plot_polygon, code_file_name from _geoslib import Polygon # Data xx = N.array([0., 5., 4., 1.]) yy = N.array([0., 0., 2., 2.]) # From Polygon P.figure(figsize=(5, 5)) p0 = create_polygon(Polygon(N.array([xx, yy]).T)) plot_polygon(p0, color='b', label='From poly') # From data p1 = create_polygon(N.array([xx, yy]).T-.25) plot_polygon(p1, color='r', label='From data') # From transposed data p2 = create_polygon(N.array([xx, yy])-0.5) plot_polygon(p2, color='g', label='From transposed data') # From min/max p3 = create_polygon([xx.min(), yy.min(), xx.max(), yy.max()]) plot_polygon(p3, color='m', label='From min/max') # With projection proj = lambda x, y: (x*1.5, y*1.5) p4 = create_polygon(p0, proj=proj) plot_polygon(p4, color='cyan', label='With projection') # Save
# Imports from vcmq import P, darken, code_file_name, plot_cmap cmap_name = "CMRmap" cmap_old = P.get_cmap(cmap_name) # Max cmap_10 = darken(cmap_old, 1) # Medium cmap_05 = darken(cmap_old, 0.5) # Min cmap_00 = darken(cmap_old, 0) # Plot fig = P.figure(figsize=(6, 2)) kw = dict(fig=fig, figsize=None, aspect=.15, show=False, close=False) P.subplot(221) plot_cmap(cmap_old, title='Original', **kw) P.subplot(222) plot_cmap(cmap_00, title='f = 0.0', **kw) P.subplot(223) plot_cmap(cmap_05, title='f = 0.5', **kw) P.subplot(224) plot_cmap(cmap_10, title='f = 1.0', **kw) P.figtext(.5, 1, 'Darken ' + cmap_name, va='top', ha='center', size=12) P.tight_layout() P.savefig(code_file_name(ext='png')) P.close()
method='conservative', diag=diag, coordSys='cart') # Norm frac = diag['dstAreaFractions'] mask = frac == 0. frac[mask] = 1. varo[:] /= frac varo[:] = MV2.masked_where(mask, varo, copy=0) # Plot rc('font', size=9) kw = dict(vmin=vari.min(), vmax=vari.max()) axis = [xxbi.min(), xxbi.max(), yybo.min(), yybo.max()] P.figure(figsize=(7, 3)) P.subplot(121, aspect=1) P.pcolormesh(xxbi, yybi, vari, **kw) P.colorbar(shrink=0.7) add_grid(gridi, color='0.5') add_grid(grido) P.axis(axis) P.title('Original: max=%g min=%g' % (vari.max(), vari.min())) P.subplot(122, aspect=1) P.pcolormesh(xxbo, yybo, varo, **kw) P.colorbar(shrink=0.7) add_grid(gridi) add_grid(grido, color='0.5') P.axis(axis) P.title('Regridded: max=%g min=%g' % (varo.max(), varo.min())) P.tight_layout()
fill_value=1e20) N.random.seed(0) xo = N.random.uniform(lon0, lon1, np) yo = N.random.uniform(lat0, lat1, np) zo = N.random.uniform(dep0, dep1, np) to = comptime(N.random.uniform(reltime(time0, time.units).value, reltime(time1, time.units).value, np), time.units) # Rectangular xyzt with 1d z vo = grid2xy(vi, xo=xo, yo=yo, zo=zo, to=to, method='linear') von = grid2xy(vi, xo=xo, yo=yo, zo=zo, to=to, method='nearest') assert vo.shape==(ne, np) N.testing.assert_allclose(vo[0], yo) kwp = dict(vmin=vi.min(), vmax=vi.max()) P.figure(figsize=(6, 3)) P.subplot(121) P.scatter(xo, yo, c=vo[0], cmap='jet', **kwp) add_grid(vi.getGrid()) P.title('linear4d') P.subplot(122) P.scatter(xo, yo, c=von[0], cmap='jet', **kwp) add_grid(vi.getGrid()) P.title('nearest4d') P.figtext(.5, .98, 'grid2xy in 4D', va='top', ha='center', weight='bold') P.tight_layout() P.savefig(code_file_name(ext='.png')) P.close() # Reversed z and y vi_revz = vi[:, :, ::-1, ::-1, :]
zzov = griddata(xi, yi, zi, (xr, yr), method='nat', ext=True, sub=10) # -> Tester la methode "carg" # -> Testez parametre sub=... # -> Essayer avec GridData zov2 = xy2xy(xi, yi, zi, xo, yo) # Krigeage from vacumm.misc.grid.kriging import krig zzok = krig(xi, yi, zi, xxr.ravel(), yyr.ravel(), nproc=1).reshape(zzr.shape) # -> Tester nproc et npmax # Plots from vcmq import meshbounds, P xxrb, yyrb = meshbounds(xr, yr) P.figure(figsize=(10, 8)) axis = [xxrb.min(), xxrb.max(), yyrb.min(), yyrb.max()] # P.subplot(332) P.pcolormesh(xxrb, yyrb, zzr, **vminmax) P.scatter(xi, yi, c='k') P.title('Original') P.axis(axis) # P.subplot(334) P.pcolormesh(xxrb, yyrb, zzoc, **vminmax) P.title('CDAT/Natgrid') P.axis(axis) # P.subplot(335) P.pcolormesh(xxrb, yyrb, zzork, **vminmax)
# Interpolate to random points xo, yo = random_points(np=npo) zo = krig(xi, yi, zi, xo, yo) # Plot # - source data axis = [xg.min(), xg.max(), yg.min(), yg.max()] kw = dict(vmin=zzg.min(), vmax=zzg.max()) kwim = dict(extent=axis, interpolation='bilinear', origin='lower', alpha=.2, **kw) kwsc = dict(lw=0.2, **kw) P.figure(figsize=(6, 3.5)) P.subplot(121) P.title('Source field') P.imshow(zzg, **kwim) P.scatter(xi, yi, c=zi, **kwsc) P.axis(axis) # - interpolated data P.subplot(122) P.title('Interpolated points') P.imshow(zzg, **kwim) P.scatter(xo, yo, c=zo, marker='s', s=30, **kwsc) P.axis(axis) P.tight_layout() savefigs(code_file_name(), verbose=False) P.close()
taxi.toRelativeTime("hours since 2000") ctimesi = taxi.asComponentTime() ct0 = round_date(ctimesi[0], "hour") ct1 = round_date(ctimesi[-1], "hour") taxo = create_time(lindates(ct0, ct1, 1, "hour"), taxi.units) # Lag error # - estimation els = [] lags = N.arange(1, 6) for lag in lags: els.append(N.sqrt(((sp[lag:] - sp[:-lag]) ** 2).mean())) els = N.array(els) a, b, _, _, _ = linregress(lags, els) # - plot P.figure(figsize=(6, 6)) P.subplot(211) P.plot(lags, els, "o") P.plot([0, lags[-1]], [b, a * lags[-1] + b], "g") P.axhline(b, color="0.8", ls="--") P.ylim(ymin=0) P.xlabel("Lag [hour]") P.ylabel("Error [m s-1]") add_key(1) P.title("Linear lag error model") # Interpolation sph, speh = regrid1d(sp, taxo, method="cellerr", erri=spe, errl=-a, geterr=True) # Time zoom for plot clarity tzoom = (ct1.sub(7, cdtime.Hour), ctimesi[-1])
zo = sck(xo, yo) zoe = scke(xo, yo) zzg = zo.reshape(ny, nx) zzge = zoe.reshape(ny, nx) # Plot vmin = min(zi.min(), zo.min(), zoe.min()) vmax = max(zi.max(), zo.max(), zoe.max()) vmax = max(abs(vmin), abs(vmax)) vmin = -vmax cmap = 'cmocean_tempo' cmap = 'cmocean_delta' kw = dict(vmin=vmin, vmax=vmax) P.figure(figsize=(6, 5.5)) ax = P.subplot(221) P.pcolormesh(xxg, yyg, zzg, cmap=cmap, **kw) P.colorbar() P.scatter(xi, yi, c=zi, s=100, cmap=cmap, **kw) P.title('Without obs error') P.subplot(222, sharex=ax, sharey=ax) P.pcolormesh(xxg, yyg, zzge, cmap=cmap, **kw) P.colorbar() P.scatter(xi, yi, c=zi, s=100, cmap=cmap, **kw) #P.axis('image') P.title('With obs error') P.subplot(223, sharex=ax, sharey=ax)
nx = ny = 50 np = 500 mtype = 'gauss' dmax = 2.5 from vcmq import N, P, code_file_name, savefigs from vacumm.misc.grid.kriging import gridded_gauss3, random_gauss3, variogram, variogram_fit # Generate random field xxg, yyg, zzg = gridded_gauss3(nx=nx, ny=ny) x, y, z = random_gauss3(np=np) # Variogram from data d, v = variogram(x, y, z, dmax=dmax) # Variogram fit with null nugget vm = variogram_fit(x, y, z, mtype, n=0, dmax=dmax) D = N.linspace(0, d.max()) V = vm(D) # Compare P.figure(figsize=(6, 4)) P.title('Variogram') P.plot(d, v, 'ob', label='From data') P.plot(D, V, '-r', label='Fitted model (%s)'%mtype) P.legend(loc='best') P.ylim(ymin=0) savefigs(code_file_name(ext=False), pdf=True, verbose=False) P.close()
# Output grido = create_grid(xi[:]+2*2.5, yi[:]+3*1.5) xo = grido.getLongitude() yo = grido.getLatitude() xo.setBounds(bounds1d(xo)) yo.setBounds(bounds1d(yo)) xxob, yyob = meshbounds(xo, yo) # Regridding varo, wo = vari.regrid(grido, tool='regrid2', returnTuple=1) # Plot kw = dict(fill='pcolor', contour=False, xhide=True, yhide=True, xticks=[], yticks=[], cmap='jet', colorbar=False, show=False) P.figure(figsize=(6, 3)) p = plot2d(vari, subplot=131, title='Original', **kw) add_grid(gridi) add_grid(grido) P.axis('image') p = plot2d(varo, subplot=132, title='Regridded', **kw) add_grid(gridi) add_grid(grido) P.axis('image') P.subplot(133) P.pcolor(xxob, yyob, wo) add_grid(grido) P.title("Output weights") P.tight_layout() savefigs(code_file_name(),pdf=True, verbose=False) P.close()
vari[nx/3:2*nx/3, nyi/3:2*nyi/3] = N.ma.masked x = N.arange(nx) dyi = (yi[1]-yi[0])*0.49 dyo = (yo[1]-yo[0])*0.49 yyi = N.resize(yi, vari.shape)+N.random.uniform(-dyi, dyi, vari.shape) yyo = N.resize(yo, (nx, len(yo)))+N.random.uniform(-dyo, dyo, (nx, len(yo))) yyib, xxib = meshcells(yyi, x) yyob, xxob = meshcells(yyo, x) varon = N.ma.masked_values(interp1dxx(vari.filled(), yyi, yyo, mv, 0, extrap=0), mv) varol = N.ma.masked_values(interp1dxx(vari.filled(), yyi, yyo, mv, 1, extrap=0), mv) varoh = N.ma.masked_values(interp1dxx(vari.filled(), yyi, yyo, mv, 3, extrap=0), mv) kw = dict(vmin=vari.min(), vmax=vari.max()) axlims = [x[0], x[-1], yo[0], yo[-1]] P.figure(figsize=(8, 8)) P.subplot(221) P.pcolor(xxib, yyib, vari) P.axis(axlims) P.title('Original') P.subplot(222) P.pcolor(xxob, yyob, varon, **kw) P.axis(axlims) P.title('Nearest1dxx') P.subplot(223) P.pcolor(xxob, yyob, varol, **kw) P.axis(axlims) P.title('Linear1dxx') P.subplot(224) P.pcolor(xxob, yyob, varoh, **kw) P.axis(axlims)
xg, yg, zzg = gridded_gauss3() xi, yi, zi = random_gauss3(np=npi) zi = N.vstack((zi, zi)) # simulate several time steps for multifit # Init kriger kriger = OrdinaryCloudKriger(xi, yi, zi, npmax=npmax, nproc=nproc) # Output points xo, yo = random_points(np=npo) # Interpolate t0 = time() zo = kriger(xo, yo) # Plot P.figure(figsize=(6, 8)) axis = [xg.min(), xg.max(), yg.min(), yg.max()] kw = dict(vmin=zi.min(), vmax=zi.max()) kwim = dict(extent=axis, interpolation='bilinear', origin='lower', alpha=.2, **kw) kwsc = dict(lw=0.2, **kw) P.subplot(211) P.imshow(zzg, **kwim) P.scatter(xi, yi, c=zi if zi.ndim == 1 else zi[0], s=20, **kwsc) P.title('Input points') P.subplot(212) P.imshow(zzg, **kwim) P.scatter(xo, yo, c=zo if zo.ndim == 1 else zo[0], s=40, **kwsc)