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()
# On construit un grille reguliere import numpy as N from vacumm.misc.grid import meshbounds xr = N.arange(20.) yr = N.arange(10.) xxr, yyr = N.meshgrid(xr, yr) xrb, yrb = meshbounds(xr, yr) zzr = (N.sin(xxr*N.pi/6)*N.sin(yyr*N.pi/6) + \ N.exp(-((xxr-7.)**2+(yyr-7.)**2)/4.**2))*100. zzr -= zzr.min() vminmax=dict(vmin=zzr.min(), vmax=zzr.max()) # On construit un echantillon irregulier a partir du regulier ij = N.unique((N.random.rand(50)*zzr.size).astype('i')) xi, yi, zi = xxr.flat[ij], yyr.flat[ij], zzr.flat[ij] # Interpolation sur la grille reguliere # - natgrid from vacumm.misc.grid.regridding import griddata zirn = griddata(xi, yi, zi, (xr, yr), method='nat', ext=True, sub=6) # - krigeage zirk = griddata(xi, yi, zi, (xr, yr), method='carg') # Plot de verif import pylab as P from vacumm.misc.plot import savefigs P.figure(1, figsize=(6, 8)) P.subplots_adjust(hspace=.3, bottom=.05, top=.95, left=.06) # - regulier P.subplot(311) P.pcolor(xrb, yrb, zzr, **vminmax)
def plot_bathy(bathy, shadow=True, contour=True, shadow_stretch=1., shadow_shapiro=False, show=True, shadow_alpha=1., shadow_black=.3, white_deep=False, nmax=30,m=None, alpha=1., zmin=None, zmax=None, **kwargs): """Plot a bathymetry - *lon*: Longitude range. - *lat*: Latitude range. - *show*:Display the figure [default: True] - *pcolor*: Use pcolor instead of contour [default: False] - *contour*: Add line contours [default: True] - *shadow*:Plot south-west shadows instead of filled contours. - *nmax*: Max number of levels for contours [default: 30] - *white_deep*: Deep contours are white [default: False] - All other keyword are passed to :func:`~vacumm.misc.plot.map2` """ # Input bb = bathy if isinstance(bathy, GriddedBathy): bathy = bathy.bathy() if shadow: xxs = getattr(bb, '_xxs', None) yys = getattr(bb, '_yys', None) if xxs is None: lon2d = bb._lon2d lat2d = bb._lat2d elif shadow: xxs = yys = None lon2d,lat2d = meshgrid(get_axis(bathy, -1).getValue(),get_axis(bathy, -2).getValue()) # Masking if 'maxdep' in kwargs: zmin = -maxdep if 'maxalt' in kwargs: zmax = maxalt if zmin is not None: bathy[:] = MV2.masked_less(bathy, zmin) if zmax is not None: bathy[:] = MV2.masked_greater(bathy, zmax) # Default arguments for map if hasattr(bathy, 'long_name'): kwargs.setdefault('title',bathy.long_name) if 'cmap' not in kwargs: vmin, vmax = minmax(bathy) # print 'cmap topo', vmin, vmax kwargs['cmap'] = auto_cmap_topo((kwargs.get('vmin', vmin), kwargs.get('vmax', vmax))) # kwargs.setdefault('ticklabel_size','smaller') kwargs.setdefault('clabel_fontsize', 8) kwargs.setdefault('clabel_alpha',.7*alpha) kwargs.setdefault('clabel_glow_alpha', kwargs['clabel_alpha']) kwargs.setdefault('fill', 'contourf') kwargs['nmax'] = nmax kwargs['show'] = False kwargs['contour'] = contour if shadow: kwargs.setdefault('alpha',.5*alpha) kwargs.setdefault('projection', 'merc') kwargs.setdefault('fmt', BathyFormatter()) kwargs.setdefault('colorbar_format', BathyFormatter()) kwargs.setdefault('units', False) kwargs.setdefault('levels_mode','normal') kwargs.setdefault('bgcolor', '0.8') kwargs.setdefault('contour_linestyle', '-') savefig = kwargs.pop('savefig', None) kwsavefig = kwfilter(kwargs, 'savefig_') # White contour when dark if contour and white_deep: levels = auto_scale(bathy,nmax=nmax) colors = [] nlevel = len(levels) for i in range(nlevel): if i < old_div(nlevel,2): colors.append('w') else: colors.append('k') kwargs.setdefault('contour_colors',tuple(colors)) # Call to map m = map2(bathy, m=m, **kwargs) # Add shadow if shadow: # Filter data = MV.array(bathy,'f',fill_value=0.) if shadow_shapiro: data = shapiro2d(data,fast=True).shape # Gradient grd = deriv2d(data,direction=45.,fast=True,fill_value=0.).filled(0.) grdn = refine(grd, 3) grdn = norm_atan(grdn,stretch=shadow_stretch).clip(0,1.) ; del grd # Grid # im = m.map.imshow(grdn,cmap=P.get_cmap('gist_yarg'),alpha=1) # gist_yarg , YlGnBu if xxs is None or yys is None: xx, yy = m(lon2d,lat2d) xxr = refine(xx, 3) yyr = refine(yy, 3) xxs, yys = meshbounds(xxr, yyr) if isinstance(bb, GriddedBathy): bb._xxs = xxs bb._yys = yys del xx, yy, xxr, yyr # Cmap cmap = cmap_custom(( ((1, )*3, 0), ((shadow_black, )*3, 1) )) # Plot pp = m.map.pcolormesh(xxs, yys, grdn,cmap=cmap)#P.get_cmap('gist_yarg')) pp.set_zorder(.9) pp.set_linewidth(0) pp.set_alpha(shadow_alpha*N.clip(alpha*2, 0, 1)) del grdn # Show it? if savefig: m.savefig(savefig, **kwsavefig) if show: P.show() return m
# -*- coding: utf8 -*- # Input variables import numpy as N, cdms2 as cdms, MV2 as MV from vacumm.misc.grid import meshbounds xi = N.arange(20.) yi = N.arange(10.) xxi, yyi = N.meshgrid(xi, yi) xib, yib = meshbounds(xi, yi) vari = (N.sin(xxi*N.pi/6)*N.sin(yyi*N.pi/6) + N.exp(-((xxi-7.)**2+(yyi-7.)**2)/4.**2))*100. vminmax=dict(vmin=vari.min(), vmax=vari.max()) vari = cdms.createVariable(vari) vari.setAxis(-2, cdms.createAxis(yi)) vari.setAxis(-1, cdms.createAxis(xi)) vari[3:4, 3:7] = MV.masked # Output grid xo = cdms.createAxis(N.linspace(-3., 23., 70)) yo = cdms.createAxis(N.linspace(-3., 13., 40)) # Interpolation from vacumm.misc.grid.regridding import interp2d # - bilinear varob = interp2d(vari, (xo, yo), method='bilinear') # - nearest varon = interp2d(vari, (xo, yo), method='nearest') # Plot import pylab as P from vacumm.misc.plot import savefigs, add_grid xob, yob = meshbounds(xo[:], yo[:])
# On construit un grille reguliere import numpy as N from vacumm.misc.grid import meshbounds xr = N.arange(20.) yr = N.arange(10.) xxr, yyr = N.meshgrid(xr, yr) xrb, yrb = meshbounds(xr, yr) zzr = (N.sin(xxr*N.pi/6)*N.sin(yyr*N.pi/6) + \ N.exp(-((xxr-7.)**2+(yyr-7.)**2)/4.**2))*100. zzr -= zzr.min() vminmax = dict(vmin=zzr.min(), vmax=zzr.max()) # On construit un echantillon irregulier a partir du regulier ij = N.unique((N.random.rand(50) * zzr.size).astype('i')) xi, yi, zi = xxr.flat[ij], yyr.flat[ij], zzr.flat[ij] # Interpolation sur la grille reguliere # - natgrid from vacumm.misc.grid.regridding import griddata zirn = griddata(xi, yi, zi, (xr, yr), method='nat', ext=True, sub=6) # - krigeage zirk = griddata(xi, yi, zi, (xr, yr), method='carg') # Plot de verif import pylab as P from vacumm.misc.plot import savefigs P.figure(1, figsize=(6, 8)) P.subplots_adjust(hspace=.3, bottom=.05, top=.95, left=.06) # - regulier P.subplot(311) P.pcolor(xrb, yrb, zzr, **vminmax)