#!/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 # if __name__ == '__main__': tt.check('end import') # #start from here def roll_lon(da, lonmax=180): if lonmax == 180: if da.lon.max() > 180: da = da.roll(lon=da.lon.size//2, roll_coords=True) lon_new = da.lon.where(da.lon<=180, other=da.lon-360).values da = da.assign_coords(lon=lon_new) elif lonmax == 360: if da.lon.min() < 0: da = da.roll(lon=da.lon.size//2, roll_coords=True) lon_new = da.lon.where(da.lon>0, other=da.lon+360).values da = da.assign_coords(lon=lon_new) return da model = 'FLOR' #ifiles = 'precip_FLOR_HistRCP45_tigercpu_intelmpi_18_576PE_ens??_1860-2100_NHE.nc' ifiles = [ sorted(glob.glob('precip_AM2.5C360_amipHadISSTlong_chancorr_tigercpu_intelmpi_18_1080PE_ens??_1871-2019_NHE.nc')), sorted(glob.glob('precip_AM2.5C360_amipHadISSTlong_chancorr_tigercpu_intelmpi_18_1080PE_extend2020_ens??_2020-2020_NHE.nc')), sorted(glob.glob('precip_AM2.5C360_amipHadISSTlong_chancorr_tigercpu_intelmpi_18_1080PE_extend2021_ens??_2021-2021_NHE.nc')), ] years = slice('1950', '2021') season = 'JJA' sel_season = lambda da: da.isel(time=(da.time.dt.month>=6)&(da.time.dt.month<=8)) tag = f'{years.start}-{years.stop}_{season}' ofile = __file__.replace('.py', f'_{tag}.nc') if os.path.exists(ofile) and not 'o' 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) da.to_dataset().to_netcdf(ofile) print('[saved]:', ofile) def plot_subregion(region_name='WCE', **kws): ax = kws.pop('ax', plt.gca()) label = kws.pop('label', region_name) lon = [-10, -10, 40, 40, -10] lat = [45, 48, 61.3, 45, 45] ax.plot(lon, lat, label=label, **kws) if __name__ == '__main__': from wyconfig import * #my plot settings from geoplots import mapplot fig, ax = plt.subplots(figsize=(6,2.5)) da.pipe(roll_lon, 180).plot(cmap='YlGnBu', vmax=10, vmin=0, levels=11) mapplot() plot_subregion('WCE', color='lightgray', lw=1) #plot_subregion('IndusBasin', color='C1') ax.set_xlabel('') ax.set_ylabel('') #ax.legend(loc='upper left') ax.set_title(f'{model} {da.name} {tag.replace("_", " ")} climatology') #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()