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.pcolormesh(xxb, yyb, mask, shading='faceted') P.scatter(xx.ravel(), yy.ravel(), c=(0, 1, 0)) P.grid(True) 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()
# 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() savefigs(code_file_name(), verbose=False) P.close() rcdefaults()
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()
# Regrilleur de CDAT regridder = CDATRegridder(gridi, grido, method="cellave") # -> CHANGEZ LA METHODE ssto2 = regridder.regrid(ssti) ssto3, cdr = regrid2d(ssti, grido, cdr=regridder, getcdr=True) # -> VERIFIEZ LE TYPE # Plots kwp = dict( vmin=ssti.min(), vmax=ssti.max(), res=None, show=False, colorbar=False, drawmeridians_linewidth=0, drawparallels_linewidth=0, grid=False, yhide="auto", **select ) map2(ssti, title="Original", figsize=(15, 5), subplot=131, **kwp) add_grid(gridi, alpha=1) map2(ssto, title="Avec regrid2d", subplot=132, **kwp) add_grid(grido, alpha=1) add_grid(gridi, edges=False, centers=True, alpha=0.5, markersize=3, marker="o") map2(ssto2, title="Avec CDATRegridder", subplot=133, **kwp) add_grid(grido, alpha=1) add_grid(gridi, edges=False, centers=True, alpha=0.5, markersize=3, marker="o") P.tight_layout() P.show()
print method # Regrillage ssto = regrid2d(ssti, grido, method=method) # -> CHANGEZ LA METHODE # -> UTILISEZ USECDR=TRUE # Regrilleur de CDAT regridder = CDATRegridder(gridi, grido, method='cellave') # -> CHANGEZ LA METHODE ssto2 = regridder.regrid(ssti) ssto3, cdr = regrid2d(ssti, grido, cdr=regridder, getcdr=True) # -> VERIFIEZ LE TYPE # Plots kwp = dict(vmin=ssti.min(), vmax=ssti.max(), res=None, show=False, colorbar=False, drawmeridians_linewidth=0, drawparallels_linewidth=0, grid=False, yhide='auto', **select) map2(ssti, title='Original',figsize=(15, 5), subplot=131, **kwp) add_grid(gridi, alpha=1) map2(ssto, title='Avec regrid2d', subplot=132, **kwp) add_grid(grido, alpha=1) add_grid(gridi, edges=False, centers=True, alpha=.5, markersize=3, marker='o') map2(ssto2, title='Avec CDATRegridder', subplot=133, **kwp) add_grid(grido, alpha=1) add_grid(gridi, edges=False, centers=True, alpha=.5, markersize=3, marker='o') P.tight_layout() P.show()
"""Test the fortran function :f:func:`closest2d`""" from vcmq import N, P, code_file_name, P, os, rotate_grid, add_grid from vacumm.misc.grid._interp_ import closest2d # Input grid grid = rotate_grid((N.arange(5), N.arange(4)), 30) xxi = grid.getLongitude()[:].filled() yyi = grid.getLatitude()[:].filled() # Input random points N.random.seed(0) np = 100 xxo = N.random.random(np)*(xxi.max()-xxi.min()) + xxi.min() yyo = N.random.random(np)*(yyi.max()-yyi.min()) + yyi.min() # Closest for xo, yo in zip(xxo, yyo): i,j = closest2d(xxi, yyi, xo, yo, nogeo=0) P.plot([xo, xxi[j-1, i-1]], [yo, yyi[j-1, i-1]], 'k') add_grid(grid, color='k', markersize=10, centers=True, marker='o', alpha=1) P.scatter(xxo, yyo, c='r', s=40, zorder=11) P.title('closest2d') P.axis('image') figfile = code_file_name(ext='png') if os.path.exists(figfile): os.remove(figfile) P.savefig(figfile) P.close()
gridco = rotate_grid((xco, yco), -20) # Interpolate and Plot # - original rc('font', size=8) rc('axes', labelsize=7) kw = dict(show=False, axes_aspect=1, colorbar=False, grid=False) kwg = dict(edges=False, centers=True, markersize=2, alpha=1) ip = 1 plot2d(varri, title='Original rectangular', figure=10, figsize=(7, 7), subplot=(4,3,ip), **kw);ip+=1 plot2d(varci, title='Original curvilinear', subplot=(4,3,ip), **kw);ip+=1 # - nearest varo = regrid2d(varci, gridco, method='nearest', tool='vacumm') plot2d(varo, title='VACUMM / Nearest', subplot=(4,3,ip), **kw);ip+=1 add_grid(gridci, **kwg) # - bilin r2r / vacumm varo = regrid2d(varri, gridro, method='bilinear', tool='vacumm') plot2d(varo, title='VACUMM / Bilinear', subplot=(4,3,ip), **kw);ip+=1 add_grid(gridri, **kwg) # - bilin c2c / vacumm varo = regrid2d(varci, gridco, method='bilinear', tool='vacumm') plot2d(varo, title='VACUMM / Bilinear', subplot=(4,3,ip), **kw);ip+=1 add_grid(gridci, **kwg) # - bilin c2c / emsf varo = regrid2d(varci, gridco, method='bilinear', tool='esmf') plot2d(varo, title='ESMF / Bilinear', subplot=(4,3,ip), **kw);ip+=1 add_grid(gridci, **kwg) # - bilin c2c / libcf varo = regrid2d(varci, gridco, method='bilinear', tool='libcf') plot2d(varo, title='LibCF / Bilinear', subplot=(4,3,ip), **kw);ip+=1
for iyi in iyis: label = iyi==iyis[0] P.plot(xi, zzi[iyi], 'ob-', markersize=8, label='Original' if label else None) P.plot(xo, zzo[iyi*r], 'or-', markersize=5, lw=.8, label='Interpolated' if label else None) P.legend(loc='best', framealpha=0.5) P.grid() P.title('Section') P.tight_layout() savefigs(code_file_name(ext='_0.png'), verbose=False, pdf=True) # Maps P.figure(figsize=(8, 4)) levels = auto_scale(vmin=zzi.min(), vmax=zzi.max(), nmax=30) P.subplot(121) P.contourf(xxi, yyi, zzi, levels=levels) P.contour(xxi, yyi, zzi, linewidths=0.1, levels=levels, colors='k') add_grid((xxi, yyi), alpha=.3, centers=True) for iyi in iyis: P.axhline(yi[iyi], linestyle='--', color='k') P.title('Original') P.subplot(122) P.contourf(xxo, yyo, zzo, levels=levels) P.contour(xxo, yyo, zzo, linewidths=0.1, levels=levels, colors='k') add_grid((xxo, yyo), alpha=.2, centers=True) for iyi in iyis: P.axhline(yi[iyi], linestyle='--', color='k') P.title('Interpolated') P.tight_layout() savefigs(code_file_name(ext='_1.png'), verbose=False, pdf=True) P.close()
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, :] vo = grid2xy(vi_revz, xo=xo, yo=yo, zo=zo, to=to, method='linear') N.testing.assert_allclose(vo[0], yo)
var['t'].setAxis(0, dep) # Arakawa manager ag = CGrid() # Interpolations for p in 'u', 'v', 'f', 'w': var[p] = ag.interp(var['t'], 't', p, mode='extrap') # Surface plots vmin, vmax = minmax(*[var[p][-1] for p in ['u', 'v', 'f']]) kw = dict(show=False, res=None, vmin=vmin, vmax=vmax, colorbar=False, grid=False, cmap='jet') m = map2(var['t'][-1], fill='pcolor', title='Interpolations on an Arakawa C grid: T->U/V/F', **kw) add_grid(var['t'], linestyle='-') kw.update(fill='scatter', contour=False, fill_s=60) markers = dict(u='>', v='^', f='D', t='o') for p in 't', 'u', 'v', 'f': m = map2(var[p][-1], fill_marker=markers[p], shadow=True, zorder=100, **kw) m.savefig(code_file_name(ext='_1.png')) m.close() # Vertical plot curve2(var['t'][:, 0, 0], 'o-b', ymax=0, show=False, title='Interpolations on an Arakawa C grid: T->W') curve2(var['w'][:, 0, 0], '^r', show=False, savefig=code_file_name(ext='_2.png')) result = [ ('assertEqual', [var['t'][0, 0, :2].mean(), var['u'][0, 0, 0]]),
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) xylims = (xxi.min(), xxi.max(), yyi.min(), yyi.max()) P.axis(xylims) P.title('Interp to grid')
# 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() savefigs(code_file_name(), verbose=False) P.close() rcdefaults()
# 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) xylims = (xxi.min(), xxi.max(), yyi.min(), yyi.max()) P.axis(xylims) P.title('Interp to grid')
mask = frac==0. frac[mask] = 1. varo[:] /= frac varo[:] = MV2.masked_where(mask, varo, copy=0) log(f, ' dstareas: %s'%diag['dstAreas']) log(f, ' varo: %s'%varo) # Plot P.figure(figsize=(6,3)) P.subplot(121).set_aspect(1) P.pcolormesh(xxib,yyib,vari.asma(),**kw) #P.colorbar() P.title('Original') kwg = dict(alpha=1, linewidth=1., centers=True) add_grid(gridi, color=(0,0,.2), marker='o', **kwg) add_grid(grido, color=(.2,0,0), marker='+', markersize=10,**kwg) P.axis('image') axis = P.axis() P.subplot(122).set_aspect(1) P.pcolormesh(xxob,yyob,varo.asma(),**kw) #P.colorbar() P.title('%(tool)s / %(method)s'%locals()) add_grid(gridi, color=(0,0,.2), marker='o', **kwg) add_grid(grido, color=(.2,0,0), marker='+',markerlinewidth=1,markersize=8,**kwg) P.axis(axis) ifig = len(figfiles) ff = figfile%vars() P.tight_layout() P.savefig(ff) figfiles.append(ff)
yi = N.arange(nxy*1.) xxi, yyi = N.meshgrid(xi, yi) zi = N.ma.array(yyi) zi[int(nxy*0.3):int(nxy*0.8), int(nxy*0.3):int(nxy*0.8)] = N.ma.masked zi.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 = zi.get_fill_value() zo = nearest2dto1d(xi,yi,zi.filled(mv),xo,yo,mv) zo = N.ma.masked_values(zo, mv) # Plot kw = dict(vmin=zi.min(), vmax=zi.max()) P.figure(figsize=(6, 6)) P.subplot(111, aspect=1) P.contourf(xxi, yyi, zi[0], **kw) add_grid((xi, yi), edges=False, centers=True, marker='o') P.scatter(xo, yo, c=zo[0], s=50, **kw) P.title('nearest2dto1d') figfile = code_file_name(ext='png') if os.path.exists(figfile): os.remove(figfile) P.savefig(figfile) P.close()
# Interpolate and Plot # - original rc('font', size=6) rc('axes', labelsize=7) kw = dict(show=False, axes_aspect=1, colorbar=False, grid=False, linewidth=.3, cmap='viridis') kwg = dict(edges=False, centers=True, markersize=2, alpha=1) ip = 1 plot2d(varri[0], title='Original rectangular', figure=10, figsize=(7, 7), subplot=(4,3,ip), **kw);ip+=1 plot2d(varci[0], title='Original curvilinear', subplot=(4,3,ip), **kw);ip+=1 # - nearest varo = regrid2d(varci, gridco, method='nearest', tool='vacumm') plot2d(varo[0], title='VACUMM / Nearest', subplot=(4,3,ip), **kw);ip+=1 add_grid(gridci, **kwg) # - bilin r2r / vacumm varo = regrid2d(varri, gridro, method='bilinear', tool='vacumm') plot2d(varo[0], title='VACUMM / Bilinear', subplot=(4,3,ip), **kw);ip+=1 add_grid(gridri, **kwg) # - bilin c2c / vacumm varo = regrid2d(varci, gridco, method='bilinear', tool='vacumm') plot2d(varo[0], title='VACUMM / Bilinear', subplot=(4,3,ip), **kw);ip+=1 add_grid(gridci, **kwg) # - bilin c2c / emsf varo = regrid2d(varci, gridco, method='bilinear', tool='esmf') plot2d(varo[0], title='ESMF / Bilinear', subplot=(4,3,ip), **kw);ip+=1 add_grid(gridci, **kwg) # - bilin c2c / libcf varo = regrid2d(varci, gridco, method='bilinear', tool='libcf') plot2d(varo[0], title='LibCF / Bilinear', subplot=(4,3,ip), **kw);ip+=1
var[p] = ag.interp(var['t'], 't', p, mode='extrap') # Surface plots vmin, vmax = minmax(*[var[p][-1] for p in ['u', 'v', 'f']]) kw = dict(show=False, res=None, vmin=vmin, vmax=vmax, colorbar=False, grid=False, cmap='jet') m = map2(var['t'][-1], fill='pcolor', title='Interpolations on an Arakawa C grid: T->U/V/F', **kw) add_grid(var['t'], linestyle='-') kw.update(fill='scatter', contour=False, fill_s=60) markers = dict(u='>', v='^', f='D', t='o') for p in 't', 'u', 'v', 'f': m = map2(var[p][-1], fill_marker=markers[p], shadow=True, zorder=100, **kw) m.savefig(code_file_name(ext='_1.png')) m.close() # Vertical plot curve2(var['t'][:, 0, 0], 'o-b', ymax=0, show=False, title='Interpolations on an Arakawa C grid: T->W') curve2(var['w'][:, 0, 0], '^r',
nxy = 15 xi = N.arange(nxy * 1.) yi = N.arange(nxy * 1.) xxi, yyi = N.meshgrid(xi, yi) zi = N.ma.array(yyi) zi[int(nxy * 0.3):int(nxy * 0.8), int(nxy * 0.3):int(nxy * 0.8)] = N.ma.masked zi.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 = zi.get_fill_value() zo = dstwgt2dto1d(xi, yi, zi.filled(mv), xo, yo, mv) zo = N.ma.masked_values(zo, mv) # Plot kw = dict(vmin=zi.min(), vmax=zi.max()) P.figure(figsize=(6, 6)) P.subplot(111, aspect=1) P.contourf(xxi, yyi, zi[0], **kw) add_grid((xi, yi), edges=False, centers=True, marker='o') P.scatter(xo, yo, c=zo[0], s=50, **kw) P.title('dstwgt2dto1d') figfile = code_file_name(ext='png') if os.path.exists(figfile): os.remove(figfile) P.savefig(figfile) P.close()
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()
'or-', markersize=5, lw=.8, label='Interpolated' if label else None) P.legend(loc='best', framealpha=0.5) P.grid() P.title('Section') P.tight_layout() savefigs(code_file_name(ext='_0.png'), verbose=False, pdf=True) # Maps P.figure(figsize=(8, 4)) levels = auto_scale(vmin=zzi.min(), vmax=zzi.max(), nmax=30) P.subplot(121) P.contourf(xxi, yyi, zzi, levels=levels) P.contour(xxi, yyi, zzi, linewidths=0.1, levels=levels, colors='k') add_grid((xxi, yyi), alpha=.3, centers=True) for iyi in iyis: P.axhline(yi[iyi], linestyle='--', color='k') P.title('Original') P.subplot(122) P.contourf(xxo, yyo, zzo, levels=levels) P.contour(xxo, yyo, zzo, linewidths=0.1, levels=levels, colors='k') add_grid((xxo, yyo), alpha=.2, centers=True) for iyi in iyis: P.axhline(yi[iyi], linestyle='--', color='k') P.title('Interpolated') P.tight_layout() savefigs(code_file_name(ext='_1.png'), verbose=False, pdf=True) P.close()
"""Test the fortran function :f:func:`closest2d`""" from vcmq import N, P, code_file_name, P, os, rotate_grid, add_grid from vacumm.misc.grid._interp_ import closest2d # Input grid grid = rotate_grid((N.arange(5), N.arange(4)), 30) xxi = grid.getLongitude()[:].filled() yyi = grid.getLatitude()[:].filled() # Input random points N.random.seed(0) np = 100 xxo = N.random.random(np) * (xxi.max() - xxi.min()) + xxi.min() yyo = N.random.random(np) * (yyi.max() - yyi.min()) + yyi.min() # Closest for xo, yo in zip(xxo, yyo): i, j = closest2d(xxi, yyi, xo, yo, nogeo=0) P.plot([xo, xxi[j - 1, i - 1]], [yo, yyi[j - 1, i - 1]], 'k') add_grid(grid, color='k', markersize=10, centers=True, marker='o', alpha=1) P.scatter(xxo, yyo, c='r', s=40, zorder=11) P.title('closest2d') P.axis('image') figfile = code_file_name(ext='png') if os.path.exists(figfile): os.remove(figfile) P.savefig(figfile) P.close()