#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Fri Mar 3 18:57:00 EST 2023 if __name__ == '__main__': import sys,os from misc.timer import Timer tt = Timer(f'[{os.getcwd()}] 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 import get_kws_from_argv # if __name__ == '__main__': tt.check('end import') # case = '1034'#'10'# '0134' # model = 'AM2.5' #start from here def func_anom(ifile, ifile_ctl): #tspan = slice('0111', None) # omit the first 10 years 0101-0110 tspan = slice(None, None) da = xr.open_dataarray(ifile).sel(time=tspan).mean('time') da0 = xr.open_dataarray(ifile_ctl).sel(time=tspan).mean('time') daa = (da/da0-1)*100 """ #dgmst da = xr.open_dataarray(ifile.replace('precip_', 't_surf_')).mean('time') da0 = xr.open_dataarray(ifile_ctl.replace('precip_', 't_surf_')).mean('time') dgmst = da - da0 #normalized by dgmst daa = daa/dgmst daa.attrs['units'] = '%/K' """ daa.attrs['units'] = '%' return daa das = [] bases = [] #plus2K base = '+2K' ifile_ctl = 'precip_AM2.5_CTL1860_florSST_tigercpu_intelmpi_18_540PE_0101-0200_glbmean.nc' ifile = 'precip_AM2.5_CTL1860_florSST_plus2K_tigercpu_intelmpi_18_540PE_0101-0150_glbmean.nc' da = func_anom(ifile, ifile_ctl) das.append(da) bases.append(base) #2xCO2 base = '2xCO2' ifile_ctl = 'precip_AM2.5_CTL1860_florSST_tigercpu_intelmpi_18_540PE_0101-0200_glbmean.nc' ifile = 'precip_AM2.5_CTL1860_florSST_2xCO2_tigercpu_intelmpi_18_540PE_0101-0150_glbmean.nc' da = func_anom(ifile, ifile_ctl) das.append(da) bases.append(base) #+2%solar base = '+2%solar' ifile_ctl = 'precip_AM2.5_CTL1860_florSST_tigercpu_intelmpi_18_540PE_0101-0200_glbmean.nc' ifile = 'precip_AM2.5_CTL1860_florSST_solar2pctplus_tigercpu_intelmpi_18_540PE_0101-0150_glbmean.nc' da = func_anom(ifile, ifile_ctl) das.append(da) bases.append(base) #plus2Ktrop base = '+2Ktrop' ifile_ctl = 'precip_AM2.5_CTL1860_florSST_tigercpu_intelmpi_18_540PE_0101-0200_glbmean.nc' ifile = 'precip_AM2.5_CTL1860_florSST_plus2Ktrop_tigercpu_intelmpi_18_540PE_0101-0150_glbmean.nc' da = func_anom(ifile, ifile_ctl) das.append(da) bases.append(base) #plus2Kextr base = '+2Kextr' ifile_ctl = 'precip_AM2.5_CTL1860_florSST_tigercpu_intelmpi_18_540PE_0101-0200_glbmean.nc' ifile = 'precip_AM2.5_CTL1860_florSST_plus2Kextr_tigercpu_intelmpi_18_540PE_0101-0150_glbmean.nc' da = func_anom(ifile, ifile_ctl) das.append(da) bases.append(base) """ #2% solar base = '+2%solar' ifile_ctl = 'precip_AM2.5_CTL1990s_tigercpu_intelmpi_18_540PE_0101-0200_glbmean.nc' ifile = 'precip_AM2.5_CTL1990s_solar2pctplus_tigercpu_intelmpi_18_540PE_0101-0150_glbmean.nc' da = func_anom(ifile, ifile_ctl) das.append(da) bases.append(base) """ da = xr.concat(das, dim=pd.Index(bases, name='base')) if case is not None: da = da.isel(base=[int(s) for s in case]) #only show a subset results df = da.to_pandas() if __name__ == '__main__': from wyconfig import * #my plot settings fig,ax = plt.subplots() n_bases = da.base.size df.plot.bar(rot=0, color=[f'C{ii}' for ii in range(n_bases)]) for ii in range(n_bases): y = da.isel(base=ii).item() ax.text(ii, y, f'{y:.2f}', va='bottom', ha='center') ax.set_ylabel(f'dprecip [%]') ax.set_xlabel(f'{model} experiment') ax.axhline(0, color='gray', ls='--') #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', f'.png') if case is not None: figname = figname.replace('.png', f'__{case}.png') if 'pdf' in sys.argv: figname = figname.replace('.png', '.pdf') 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 or 'n' in sys.argv: pass else: if 'plt' in globals(): plt.show()