#!/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') # model = 'AM2.5' #start from here def func_anom(ifile, ifile_ctl): da = xr.open_dataarray(ifile).mean('time') da0 = xr.open_dataarray(ifile_ctl).mean('time') daa = da/da0*100-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') """ #dtropmst #da = xr.open_dataarray(ifile.replace('../precip_', 't_surf_').replace('glbmean', 'tropmean')).mean('time') #da0 = xr.open_dataarray(ifile_ctl.replace('../precip_', 't_surf_').replace('glbmean', 'tropmean')).mean('time') #dgmst = da - da0 if 'plus2K' in ifile: dgmst = 2 elif 'minus2K' in ifile: dgmst = -2 daa = daa/dgmst daa.attrs['units'] = '%/K' return daa das = [] bases = [] #minus2K base = '-2K' ifile_ctl = '../precip_AM2.5_CTL1860_florSST_tigercpu_intelmpi_18_540PE_0101-0200_glbmean.nc' ifile = '../precip_AM2.5_CTL1860_florSST_minus2K_tigercpu_intelmpi_18_540PE_0101-0150_glbmean.nc' da = func_anom(ifile, ifile_ctl) das.append(da) bases.append(base) #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) #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) """ #logi28 base = 'logi28' ifile_ctl = 'precip_AM2.5_CTL1990s_tigercpu_intelmpi_18_540PE_0101-0200_glbmean.nc' ifile = 'precip_AM2.5_CTL1990s_pluslogistic1kat28C_tigercpu_intelmpi_18_540PE_0101-0150_glbmean.nc' da = func_anom(ifile, ifile_ctl) das.append(da) bases.append(base) #ilogi28 base = 'ilogi28' ifile_ctl = 'precip_AM2.5_CTL1990s_tigercpu_intelmpi_18_540PE_0101-0200_glbmean.nc' ifile = 'precip_AM2.5_CTL1990s_plusinvlogistic1kat28C_tigercpu_intelmpi_18_540PE_0101-0150_glbmean.nc' da = func_anom(ifile, ifile_ctl) das.append(da) bases.append(base) #nina base = 'Nina' ifile_ctl = 'precip_AM2.5_CTL1990s_tigercpu_intelmpi_18_540PE_0101-0200_glbmean.nc' ifile = 'precip_AM2.5_CTL1990s_plusNina_mclim_tigercpu_intelmpi_18_540PE_0101-0150_glbmean.nc' da = func_anom(ifile, ifile_ctl) das.append(da) bases.append(base) #nino base = 'Nino' ifile_ctl = 'precip_AM2.5_CTL1990s_tigercpu_intelmpi_18_540PE_0101-0200_glbmean.nc' ifile = 'precip_AM2.5_CTL1990s_plusNino_mclim_tigercpu_intelmpi_18_540PE_0101-0150_glbmean.nc' da = func_anom(ifile, ifile_ctl) das.append(da) bases.append(base) #2xCO2 base = '2xCO2 +2K' ifile_ctl = '../precip_AM2.5_CTL1990s_2xCO2_tigercpu_intelmpi_18_540PE_0101-0150_glbmean.nc' ifile = '../precip_AM2.5_CTL1990s_plus2K_2xCO2_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')) 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/doceanmst [% per K]') ax.set_xlabel(f'{model} experiment') #savefig if 'savefig' in sys.argv or 's' in sys.argv: figname = __file__.replace('.py', 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 or 'n' in sys.argv: pass else: if 'plt' in globals(): plt.show()