#!/usr/bin/env python # Wenchang Yang (wenchang@princeton.edu) # Tue May 2 14:23:32 EDT 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 wython = '/tigress/wenchang/wython' if wython not in sys.path: sys.path.append(wython); print('added to python path:', wython) #from misc import get_kws_from_argv import geoxarray import xlinregress # if __name__ == '__main__': tt.check('end import') # #start from here detrend_on = True if 'detrend' in sys.argv else False dTname = 'gmst' ifile = '/tigress/cw55/work/2021_Constrain_ECS/github_ECS_TCR/data/CMIP6_dtas_dR_data_map.no_detrend.nc' if detrend_on: ifile = ifile.replace('no_detrend', 'detrend_L2') #replace with detrend_L2 file ds = xr.open_dataset(ifile).load() models = [s.split()[0] for s in ds.model.values] ds['model'] = models #T dT = ds['dtas_abrupt_4xCO2'].geo.fldmean() """ if dTname == 'gmst': elif dTname == 'tropmst': dT = ds['dtas_abrupt_4xCO2'].sel(lat=slice(-30,30)).geo.fldmean() """ #N dN = ds['dR_abrupt_4xCO2'].geo.fldmean() def cal_diff(dN, dT): #years 1-20 yearspan = slice(0,20) reg = dN.isel(year=yearspan).linregress.on(dT.isel(year=yearspan), dim='year') lambda_early = reg.slope #years 21-150 yearspan = slice(20,150) reg = dN.isel(year=yearspan).linregress.on(dT.isel(year=yearspan), dim='year') lambda_late = reg.slope lambda_diff = lambda_late - lambda_early return lambda_diff lambda_diff_gmst = cal_diff(dN, dT) #tropmst dT = ds['dtas_abrupt_4xCO2'].sel(lat=slice(-30,30)).geo.fldmean() lambda_diff_tropmst = cal_diff(dN, dT) #wrap data ds = xr.Dataset(dict( lambda_diff_gmst=lambda_diff_gmst.assign_attrs(long_name='$\lambda_{21-150} - \lambda_{1-20}$ for GMST'), lambda_diff_tropmst=lambda_diff_tropmst.assign_attrs(long_name='$\lambda_{21-150} - \lambda_{1-20}$ for TROPMST'), )) if __name__ == '__main__': from wyconfig import * #my plot settings figsize = 7,6 fig,ax = plt.subplots(figsize=figsize) color = 'C0' ds.plot.scatter(x='lambda_diff_gmst', y='lambda_diff_tropmst', c='none', edgecolors=color, label='CMIP6 models') ax.scatter(0.69, 0.06, c='none', edgecolors='C1', label='FLOR2xCO2') #label some models for model in ds.model.values: x = ds['lambda_diff_gmst'].sel(model=model).item() y = ds['lambda_diff_tropmst'].sel(model=model).item() if x>0.75 or y-x<-0.1 or y-x>0.2 or x<0: #pick some best (abs(y-1)<0.05) or worst (x>1) models ax.text(x, y, model, ha='center', va='bottom') """ for ii,model in enumerate(ds.model.values, start=1): ax.text(ds.lambda_diff_gmst.sel(model=model), ds.lambda_diff_tropmst.sel(model=model), f'{ii}', color='gray', ha='center', va='center') """ ax.axhline(0, color='gray', ls='--') ax.axvline(0, color='gray', ls='--') ax.axline((0,0), slope=1, color='gray', ls='--') N = (ds.lambda_diff_tropmst