def plot_s1a_example(fsize='small'): test_data.get_sentinel1a(fsize=fsize) #w = SARWind(test_data.sentinel1a[fsize]) w = BayesianWind(test_data.sentinel1a[fsize]) cc = w.get_corners() lonmin = np.int(np.floor(np.min(cc[0])*100))/100. lonmax = np.int(np.ceil(np.max(cc[0])*100))/100. latmin = np.int(np.floor(np.min(cc[1])*100))/100. latmax = np.int(np.ceil(np.max(cc[1])*100))/100. w.reproject( Domain(NSR().wkt, ext='-lle %s %s %s %s -ts %s %s' %(lonmin, latmin, lonmax, latmax, (lonmax-lonmin)*110., (latmax-latmin)*110.) ) ) #u = w['U'] #v = w['V'] windspeed = w['bspeed_modcmod'] winddir = w['bdir_modcmod'] u = -windspeed*np.sin((180.0 - winddir)*np.pi/180.0) v = windspeed*np.cos((180.0 - winddir)*np.pi/180.0) nmap = Nansatmap(w, resolution='h') nmap.pcolormesh(np.hypot(u,v), vmax=18) nmap.add_colorbar(fontsize=8) nmap.quiver(u, v, step=20)#, scale=1, width=0.001) nmap.draw_continents() nmap.drawgrid() #nmap.drawmeridians(np.arange(lonmin, lonmax, 5), labels=[False, False, # True, False]) #nmap.drawparallels(np.arange(latmin, latmax, 3), labels=[True, False, # False, False]) # set size of the figure (inches) #nmap.fig.set_figheight(20) #nmap.fig.set_figwidth(15) # save figure to a PNG file nmap.draw_continents() #plt.suptitle( # 'High resolution\nwind speed and direction\nfrom Sentinel-1A and ' \ # 'NCEP\n%s' %w.time_coverage_start.isoformat(), # fontsize=8 #) #nmap.fig.savefig('s1a_wind_%s.png'%fsize, dpi=150, bbox_inches='tight') nmap.fig.savefig('s1a_bwind_%s.png'%fsize, dpi=150, bbox_inches='tight')
n.reproject(d) w = Nansat(os.path.join(home, 'conferences/ESABigData2014/demo_data/gfs20110222/gfs.t00z.master.grbf03')) w.reproject(d) L_560 = n['L_560'] L_560[L_560>90] = np.nan u = w['U'] v = w['V'] nMap = Nansatmap(n, resolution='f') nMap.pcolormesh(L_560, vmin=20, vmax=90) nMap.quiver(u,v,quivectors=20) nMap.add_colorbar() nMap.drawgrid() nMap.quiver(u,v,quivectors=20) plt.suptitle('TOA radiance from MERIS image and wind direction, 2011.02.22') nMap.save('20110222_L_560.png')
def save_wind_map_image( self, fileName, scale=None, numArrowsRange=10, landmask=True, colorbar=True, cbar_fontsize=6, drawgrid=True, title=None, title_fontsize=10, edgecolor=None, quiverScaleCriteria=None, tight=True, **kwargs ): pcolormeshArgs = {"vmin": 0, "vmax": 20} for iKey in pcolormeshArgs.keys(): if iKey in kwargs.keys(): pcolormeshArgs[iKey] = kwargs.pop(iKey) quiverArgs = { "X": None, "Y": None, "U": None, "label": None, "labelpos": "E", "coordinates": "figure", "fontproperties": None, "width": None, } popKeys = [] for iKey in quiverArgs: if "quiver_" + iKey in kwargs.keys(): quiverArgs[iKey] = kwargs.pop("quiver_" + iKey) else: popKeys.append(iKey) for key in popKeys: quiverArgs.pop(key) nMap = Nansatmap(self, resolution="l", figsize=(5, 8)) # use wind direction "to" for calculating u and v winddirection = np.mod(self["winddirection"] + 180, 360) windspeed = self["windspeed"] windspeedPcolor = np.copy(windspeed) # if data has non-value (dark blue), replace to Nan if edgecolor is not None: # Replace the edge color (dark blue) to white windspeedPcolor[windspeedPcolor == edgecolor] = np.NaN # Put colormesh nMap.pcolormesh(windspeedPcolor, **pcolormeshArgs) # apply landmask to windspeeds windspeed = np.ma.masked_where(self.watermask()[1] == 2, windspeed) # specify the number of quiver quiPixelSpacing = int(np.round(windspeed.shape[1] / numArrowsRange)) numQuiX = int(self.vrt.dataset.RasterXSize / quiPixelSpacing) numQuiY = int(self.vrt.dataset.RasterYSize / quiPixelSpacing) # compute maximum wind speed on the sea maxSpeed = max(windspeed[windspeed.mask == False]) # compute a scale for quiver lenght scale = None if quiverScaleCriteria is not None: for iKey in quiverScaleCriteria.keys(): if eval(iKey % maxSpeed): scale = quiverScaleCriteria[iKey] # Draw quivers Ux = np.sin(np.radians(winddirection)) * windspeed Vx = np.cos(np.radians(winddirection)) * windspeed nMap.quiver(Ux, Vx, scale=scale, quivectors=(numQuiY, numQuiX), **quiverArgs) if colorbar: nMap.add_colorbar(fontsize=cbar_fontsize) if drawgrid: nMap.drawgrid() if title is not None: plt.title(title, fontsize=title_fontsize) if tight: nMap.fig.tight_layout() nMap.save(fileName, landmask=landmask, **kwargs)
def save_wind_map_image(self, fileName, scale=None, numArrowsRange=10, landmask=True, colorbar=True, cbar_fontsize=6, drawgrid=True, title=None, title_fontsize=10, edgecolor=None, quiverScaleCriteria=None, tight=True, **kwargs): pcolormeshArgs = {'vmin': 0, 'vmax': 20} for iKey in pcolormeshArgs.keys(): if iKey in kwargs.keys(): pcolormeshArgs[iKey] = kwargs.pop(iKey) quiverArgs = { 'X': None, 'Y': None, 'U': None, 'label': None, 'labelpos': 'E', 'coordinates': 'figure', 'fontproperties': None, 'width': None } popKeys = [] for iKey in quiverArgs: if 'quiver_' + iKey in kwargs.keys(): quiverArgs[iKey] = kwargs.pop('quiver_' + iKey) else: popKeys.append(iKey) for key in popKeys: quiverArgs.pop(key) nMap = Nansatmap(self, resolution='l', figsize=(5, 8)) # use wind direction "to" for calculating u and v winddirection = np.mod(self['winddirection'] + 180, 360) windspeed = self['windspeed'] windspeedPcolor = np.copy(windspeed) # if data has non-value (dark blue), replace to Nan if edgecolor is not None: # Replace the edge color (dark blue) to white windspeedPcolor[windspeedPcolor == edgecolor] = np.NaN # Put colormesh nMap.pcolormesh(windspeedPcolor, **pcolormeshArgs) # apply landmask to windspeeds windspeed = np.ma.masked_where( self.watermask(tps=True)[1] == 2, windspeed) # specify the number of quiver quiPixelSpacing = int(np.round(windspeed.shape[1] / numArrowsRange)) numQuiX = int(self.vrt.dataset.RasterXSize / quiPixelSpacing) numQuiY = int(self.vrt.dataset.RasterYSize / quiPixelSpacing) # compute maximum wind speed on the sea maxSpeed = max(windspeed[windspeed.mask == False]) # compute a scale for quiver lenght scale = None if quiverScaleCriteria is not None: for iKey in quiverScaleCriteria.keys(): if eval(iKey % maxSpeed): scale = quiverScaleCriteria[iKey] # Draw quivers Ux = np.sin(np.radians(winddirection)) * windspeed Vx = np.cos(np.radians(winddirection)) * windspeed nMap.quiver(Ux, Vx, scale=scale, quivectors=(numQuiY, numQuiX), **quiverArgs) if colorbar: nMap.add_colorbar(fontsize=cbar_fontsize) if drawgrid: nMap.drawgrid() if title is not None: plt.title(title, fontsize=title_fontsize) if tight: nMap.fig.tight_layout() nMap.save(fileName, landmask=landmask, **kwargs)