#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Fri Sep 9 16:18:43 EDT 2022 if __name__ == '__main__': import sys from misc.timer import Timer tt = Timer('start ' + ' '.join(sys.argv)) import sys, os.path, os, glob, datetime import xarray as xr, numpy as np, pandas as pd, matplotlib.pyplot as plt #more imports from misc.seasons import sel_season from misc.landmask import whereland import salem # if __name__ == '__main__': tt.check('end import') # #start from here daname = 'precip' #model = 'AM2.5C360' if 'AM2.5C360' in sys.argv else 'FLOR' model = os.path.basename(os.getcwd()) #ifile = 'precip_FLOR_HistRCP45_tigercpu_intelmpi_18_576PE_10ens_1981-2020_region.18_30_35_45.nc' #ifile = glob.glob('precip_*_region.18_30_35_45.nc')[0] #if model=='AM2.5C360': # ifile = 'precip_AM2.5C360_amipHadISSTrcp45_tigercpu_intelmpi_18_1080PE_3ens_1990-2020_region.285_320_-40_-15.RioGrandeLarge.nc' #elif model == 'FLOR': # ifile = 'precip_FLOR_HistRCP45_tigercpu_intelmpi_18_576PE_10ens_1990-2020_region.285_320_-40_-15.RioGrandeLarge.nc' #ifiles = glob.glob('precip_*_hurricaneHelene.nc') #ifiles.sort() #print(f'{ifiles = }') ifile = glob.glob('precip_*_Melissa.nc')[0] #ifiles = 'precip_FLOR_HistRCP45_tigercpu_intelmpi_18_576PE_ens??_1860-2100_NHE.nc' years = slice('1991', '2020') #years = slice('1990', '2020') season = """ JJAS JJASON SON """.split()[-1] tag = f'{model}_{season}{years.start}-{years.stop}' ofile = __file__.replace('.py', f'__{tag}.nc') if os.path.exists(ofile) and not 'od' in sys.argv: print('[loaded]:', ofile) da = xr.open_dataarray(ofile) else: #ds = xr.open_mfdataset(ifiles, combine='nested', concat_dim=['time', 'ens']) #daname = list(ds.data_vars)[0] #da = ds[daname].sel(time=years).pipe(sel_season).load().mean(['time', 'ens'], keep_attrs=True) print('loading...') #da = xr.open_mfdataset(ifiles)[daname] da = xr.open_dataset(ifile)[daname] da = da.assign_coords(lon=da.lon.values-360) #lon convert 180-360 to -180-0 #da = da.assign_coords(lon=da.lon.values-360) # convert values >180 to negative da = da.sel(time=years).load().pipe(sel_season, season=season).mean(['time', 'ens'], keep_attrs=True) print('saving...') da.to_dataset().to_netcdf(ofile) print('[saved]:', ofile) def plot_subregion(region_name='region of the event', **kws): ax = kws.pop('ax', plt.gca()) #label = kws.pop('label', region_name) #lonmin,lonmax,latmin,latmax = 20, 28.5, 36, 42.5 #lon = [lonmin, lonmax, lonmax, lonmin, lonmin] #lat = [latmin, latmin, latmax, latmax, latmin] #southern region shapefiles = [f'../shapefiles/sf_{region}.shp' for region in ('jamaica', 'eastcuba')] for shapefile in shapefiles: shdf = salem.read_shapefile(shapefile) #ax.plot(lon, lat, label=label, **kws) shdf.boundary.plot(ax=ax, **kws) ##northern region #lon0, lon1 = -85, -80 #lat0, lat1 = 34.5, 38 #ax.plot([lon0, lon1, lon1, lon0, lon0], [lat0, lat0, lat1, lat1, lat0], **kws) if __name__ == '__main__': from wyconfig import * #my plot settings from geoplots import mapplot figsize = None fig, ax = plt.subplots(figsize=figsize) #da.plot(cmap='YlGnBu', vmax=10, vmin=0, levels=11) #func = lambda da: (da - 273.15).assign_attrs(units='degC') #da.pipe(func).plot(center=False, vmin=0, vmax=30, levels=31, cmap='Spectral_r') #func = lambda da: da.pipe(whereland).assign_attrs(units='mm/day') func = lambda da: da.assign_attrs(units='mm/day') #vmin, vmax, levels = None, None, None vmin, vmax, levels = 0, 15, 16 da.pipe(func).plot(center=False, vmin=vmin, vmax=vmax, levels=levels, cmap='YlGnBu')#, extend='max') mapplot() plot_subregion(color='C1', lw=1) #plot_subregion('IndusBasin', color='C1') ax.set_xlabel('') ax.set_ylabel('') #ax.legend(loc='upper left') ax.set_title(f'{da.name} {tag.replace("_", " ")}') #savefig if 'savefig' in sys.argv or 's' in sys.argv: #figname = __file__.replace('.py', f'.png') figname = ofile.replace('.nc', f'.png') if 'overwritefig' in sys.argv or 'o' in sys.argv: wysavefig(figname, overwritefig=True) else: wysavefig(figname) tt.check(f'**Done**') print() if 'notshowfig' in sys.argv: pass else: plt.show()