#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Tue Jun 29 16:14:32 EDT 2021 if __name__ == '__main__': from misc.timer import Timer tt = Timer(f'start {__file__}') import sys, os.path, os, glob, datetime import xarray as xr, numpy as np, pandas as pd, matplotlib.pyplot as plt #more imports import geoxarray from misc.landmask import flagland # if __name__ == '__main__': tt.check('end import') # #start from here tspan = slice('1981', '2010') lons = slice(360-123, 360-119) lats = slice(45, 52) sel_region = lambda x: x.sel(lon=lons, lat=lats) ofile_nc = __file__.replace('.py', '.nc') if os.path.exists(ofile_nc): ds = xr.open_dataset(ofile_nc) print('[loaded]:', ofile_nc) else: ifile = 'data_tmax_FLOR_histRCP45_5ens_1860-2100.nc' print('loading...') da = xr.open_dataarray(ifile).sel(time=tspan).pipe(sel_region).load() print('calculating...') landflag = da.pipe(flagland) da = da.where(landflag>0.5).geo.fldmean() damean = da.groupby('time.dayofyear').mean(['time', 'en']) da_quantile = da.groupby('time.dayofyear').quantile([0.025, 0.17, 0.83, 0.975], dim=['time', 'en']) ds = xr.Dataset(dict(m=damean, q=da_quantile)) print('saving...') ds.to_netcdf(ofile_nc) print('[saved]:', ofile_nc) if __name__ == '__main__': from wyconfig import * #my plot settings ds = ds.pipe(lambda x: x-273.15) fig, ax = plt.subplots() ds.m.plot(color='k', label='mean') for qi in ds['quantile'].values: ds.q.sel(quantile=qi).plot(ax=ax, label=f'{qi*100:.1f}%') xticks = np.cumsum([1, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30]) xticklabels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] ax.set_xticks(xticks) ax.set_xticklabels(xticklabels) ax.set_xlim(1, 366) ax.set_xlabel('') ax.set_ylabel('tmax [$^\circ$C]') ax.set_title('') ax.text(0,1, f' {360-lons.start}-{360-lons.stop}W, {lats.start}-{lats.stop}N, land', transform=ax.transAxes, ha='left', va='top') ax.legend(loc='upper left') ax.set_title('tmax from GFDL-CM2.5/FLOR historical (1981-2010)') #savefig if 'savefig' in sys.argv: figname = __file__.replace('.py', f'.png') wysavefig(figname) tt.check(f'**Done**') plt.show()