Skip to content
Snippets Groups Projects
Commit 9627efa8 authored by Gieße, Dr. Céline's avatar Gieße, Dr. Céline
Browse files

clean up code (Arctic SAT, work-in-progress)

parent 0b35c5f9
No related branches found
No related tags found
No related merge requests found
%% Cell type:code id:fb7d6d3e-7726-49d2-a8c5-85bad5854f10 tags:
``` python
import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
import pandas as pd
import joypy
from scipy import signal
# Set font sizes for plots
SMALL_SIZE = 10
MEDIUM_SIZE = 12
BIGGER_SIZE = 14
plt.rc('font', size=MEDIUM_SIZE) # controls default text sizes
plt.rc('axes', titlesize=MEDIUM_SIZE) # fontsize of the axes title
plt.rc('axes', labelsize=MEDIUM_SIZE) # fontsize of the x and y labels
plt.rc('xtick', labelsize=SMALL_SIZE) # fontsize of the tick labels
plt.rc('ytick', labelsize=SMALL_SIZE) # fontsize of the tick labels
plt.rc('legend', fontsize=MEDIUM_SIZE) # legend fontsize
plt.rc('figure', titlesize=BIGGER_SIZE) # fontsize of the figure title
plt.rc('font', size=MEDIUM_SIZE)
#colors
colors_gwl=['black',(253/255, 141/255, 60/255),(189/255, 0/255, 38/255)]
# Global warming levels
years = np.linspace(1850, 2100, 251)
Tglob = ["T0","T15","T27"]
Tglob_values = [0,1.5,2.7]
# Data path
data_path = '/work/uo1075/u241297/data/large_ensembles/CMIP6/MPI-ESM1-2-LR/'
```
%% Cell type:markdown id:6528eeee-cbb0-44f2-9621-1fb397b2fb3d tags:
# Global warming levels
%% Cell type:code id:88e247a5-07b5-4210-9e78-46f9c663d96c tags:
%% Cell type:code id:42751e6b-01c2-401b-9427-1e3d802b07d5 tags:
``` python
#MPI-ESM
path=data_path+'global-mean/'
path = data_path+'global-mean/'
GSAT = np.zeros((50,251))
# Load global-mean surface air temperature (GSAT) data
GSAT = np.zeros((50, 251))
for i in range(50):
file = path+"tas_hist_ssp585_r"+str(i+1)+"_global-mean.nc"
GSAT[i,:]=np.squeeze(xr.open_dataset(file)['tas'])-273.15
GSAT_rm = np.array(pd.DataFrame(GSAT).rolling(20,axis=1,center=True).mean())
file = path + "tas_hist_ssp585_r" + str(i + 1) + "_global-mean.nc"
GSAT[i, :] = np.squeeze(xr.open_dataset(file)['tas']) - 273.15
Tzero_GSAT = np.mean(GSAT[:,0:51]) #1850-1900
GSATa = GSAT-Tzero_GSAT
GSATa_rm = GSAT_rm-Tzero_GSAT
GSAT_rm = np.array(pd.DataFrame(GSAT).rolling(20, axis=1, center=True).mean())
Tzero_GSAT = np.mean(GSAT[:, 0:51]) # 1850-1900
GSATa = GSAT - Tzero_GSAT
GSATa_rm = GSAT_rm - Tzero_GSAT
```
%% Cell type:code id:fe024f74-6e29-4b7f-a60d-7214aa82e639 tags:
%% Cell type:code id:5a645051-66dd-48d4-b859-c6546ec1841c tags:
``` python
GWLcross_ind = dict()
for Ti in range(3):
GWLcross_ind[Tglob[Ti]] = np.empty(50,dtype=int)
GWLcross_ind["T0"] = 50*[20]
# Determine the indices where GSAT crosses the global warming levels
GWLcross_ind = {T: np.empty(50, dtype=int) for T in Tglob}
GWLcross_ind["T0"] = 50 * [20]
for Ti in range(1,3):
for T in range(1, 3):
for i in range(50):
j = 20
while (GSATa_rm[i,j] < Tglob_values[Ti]):
j = j+1
GWLcross_ind[Tglob[Ti]][i] = j
while GSATa_rm[i, j] < Tglob_values[T]:
j += 1
GWLcross_ind[Tglob[T]][i] = j
GWL_ind = dict()
for Ti in range(3):
GWL_ind[Tglob[Ti]] = np.zeros((50,20),dtype=int)
GWL_ind = {T: np.zeros((50, 20), dtype=int) for T in Tglob}
for Ti in range(3):
for T in range(3):
for i in range(50):
GWL_ind[Tglob[Ti]][i,:] = np.linspace(GWLcross_ind[Tglob[Ti]][i]-10,GWLcross_ind[Tglob[Ti]][i]+9,20)
GWL_ind[Tglob[T]][i, :] = np.arange(GWLcross_ind[Tglob[T]][i] - 10, GWLcross_ind[Tglob[T]][i] + 10)
```
%% Cell type:markdown id:01777080-578e-45d5-b047-8a94556cd51d tags:
# Daily Arctic temperatures
%% Cell type:code id:d95e9c5a-7b80-4e46-a023-d1e669faffbc tags:
``` python
gridarea=np.array(xr.open_dataset(data_path+'gridarea.nc')['cell_area'])
```
%% Cell type:code id:4834ae76-c68e-4492-9046-a5f3187952a6 tags:
``` python
path=data_path+'arctic/'
# Load grid cell area
gridarea = np.array(xr.open_dataset(data_path+'gridarea.nc')['cell_area'])
ASATday = np.zeros((50,251,365,13,192))
# Load spatial daily surface air temperature (SAT)
ASATday = np.zeros((50, 251, 365, 13, 192))
for i in range(50):
file = path+"tas_hist_ssp585_r"+str(i+1)+"_arctic.nc"
ASATday[i,:,:]=np.array(xr.open_dataset(file)['tas']).reshape((251,365,13,192))-273.15
```
%% Cell type:code id:d91655c0-91ba-407a-bf4e-5e8bfc6d925f tags:
file = data_path + "arctic/tas_hist_ssp585_r"+str(i+1)+"_arctic.nc"
ASATday[i, :, :] = np.array(xr.open_dataset(file)['tas']).reshape((251, 365, 13, 192)) - 273.15
``` python
ASATday_samples = dict()
for Ti in range(3):
ASATday_samples[Tglob[Ti]] = list()
for i in range(50):
ASATday_samples[Tglob[Ti]].append(ASATday[i,GWL_ind[Tglob[Ti]][i,:],:,:,:])
# Create GWL samples of Arctic SAT
ASATday_samples = {Tglob[Ti]: [ASATday[i, GWL_ind[Tglob[Ti]][i, :], :, :, :] for i in range(50)] for Ti in range(3)}
#free up space
# Free up space
del ASATday
```
%% Cell type:markdown id:a51c44c0-cd57-40c6-bef8-42436a92585d tags:
## Detrending
%% Output
%% Cell type:code id:8b52e180-52d4-4a5a-9818-4523855b0d02 tags:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 13
10 ASATday[i, :, :] = np.array(xr.open_dataset(file)['tas']).reshape((251, 365, 13, 192)) - 273.15
12 # Create GWL samples of Arctic SAT
---> 13 ASATday_samples = {Tglob[Ti]: [ASATday[i, gwl_ind[Tglob[Ti]][i, :], :, :, :] for i in range(50)] for Ti in range(3)}
15 # Clean up memory
16 del ASATday
Cell In[4], line 13, in <dictcomp>(.0)
10 ASATday[i, :, :] = np.array(xr.open_dataset(file)['tas']).reshape((251, 365, 13, 192)) - 273.15
12 # Create GWL samples of Arctic SAT
---> 13 ASATday_samples = {Tglob[Ti]: [ASATday[i, gwl_ind[Tglob[Ti]][i, :], :, :, :] for i in range(50)] for Ti in range(3)}
15 # Clean up memory
16 del ASATday
Cell In[4], line 13, in <listcomp>(.0)
10 ASATday[i, :, :] = np.array(xr.open_dataset(file)['tas']).reshape((251, 365, 13, 192)) - 273.15
12 # Create GWL samples of Arctic SAT
---> 13 ASATday_samples = {Tglob[Ti]: [ASATday[i, gwl_ind[Tglob[Ti]][i, :], :, :, :] for i in range(50)] for Ti in range(3)}
15 # Clean up memory
16 del ASATday
NameError: name 'gwl_ind' is not defined
%% Cell type:code id:529c79e4-0d1e-4c19-aaa0-2d454f379be4 tags:
``` python
# Detrend by subtracting linear trend of ensemble mean
``` python
#ensemble mean
ASATday_ensmean_samples = dict()
for Ti in range(3):
ASATday_ensmean_samples[Tglob[Ti]] = np.mean(ASATday_samples[Tglob[Ti]],axis=0)
# Ensemble mean
ASATday_ensmean_samples = {T: np.nan_to_num(np.mean(ASATday_samples[T], axis=0)) for T in Tglob}
#daily trend
ASATday_trend_samples = dict()
for Ti in range(3):
ASATday_trend_samples[Tglob[Ti]] = ASATday_ensmean_samples[Tglob[Ti]]-signal.detrend(ASATday_ensmean_samples[Tglob[Ti]],axis=0)-np.mean(ASATday_ensmean_samples[Tglob[Ti]],axis=0)[np.newaxis,:,:,:]
# Daily trend
ASATday_trend_samples = {T: ASATday_ensmean_samples[T] - signal.detrend(ASATday_ensmean_samples[T], axis=0) - np.mean(ASATday_ensmean_samples[T], axis=0, keepdims=True) for T in Tglob}
#daily detrended
ASATday_detrend_samples = dict()
for Ti in range(3):
ASATday_detrend_samples[Tglob[Ti]] = ASATday_samples[Tglob[Ti]]-ASATday_trend_samples[Tglob[Ti]][np.newaxis,:,:,:,:]
# Daily detrended
ASATday_detrend_samples = {T: ASATday_samples[T] - ASATday_trend_samples[T][np.newaxis, :, :, :, :] for T in Tglob}
```
%% Cell type:markdown id:d62c36b9-0912-42dc-b769-529b18510167 tags:
## Arctic mean + seasonal samples
%% Cell type:code id:2f131159-f470-4068-a7e1-329ce67462f6 tags:
``` python
#area-weighted Arctic mean
ASATday_detrend_arcticmean_samples = dict()
for Ti in range(3):
ASATday_detrend_arcticmean_samples[Tglob[Ti]] = np.average(ASATday_detrend_samples[Tglob[Ti]].reshape(50,20,365,13*192),axis=3,weights=np.ravel(gridarea))
# Compute (area-weighted) Arctic mean
ASATday_detrend_arcticmean_samples = {Tglob[Ti]: np.average(ASATday_detrend_samples[Tglob[Ti]].reshape(50, 20, 365, 13 * 192), axis=3, weights=np.ravel(gridarea)) for Ti in range(3)}
```
%% Cell type:code id:ec372a8d-4bd8-45fa-8887-2a3b7a1fa43f tags:
%% Cell type:code id:ea745beb-d9e5-4960-baa8-e38f79500a93 tags:
``` python
#seasonal
ASATday_detrend_arcticmean_DJF_samples = dict()
ASATday_detrend_arcticmean_MAM_samples = dict()
ASATday_detrend_arcticmean_JJA_samples = dict()
ASATday_detrend_arcticmean_SON_samples = dict()
# Create seasonal samples
ASATday_detrend_arcticmean_seasonal_samples = {season: {} for season in ["DJF", "MAM", "JJA", "SON"]}
for Ti in range(3):
ASATday_detrend_arcticmean_DJF_samples[Tglob[Ti]] = np.append(ASATday_detrend_arcticmean_samples[Tglob[Ti]][:,:,-31:],ASATday_detrend_arcticmean_samples[Tglob[Ti]][:,:,:59],axis=2)
ASATday_detrend_arcticmean_MAM_samples[Tglob[Ti]] = ASATday_detrend_arcticmean_samples[Tglob[Ti]][:,:,59:151]
ASATday_detrend_arcticmean_JJA_samples[Tglob[Ti]] = ASATday_detrend_arcticmean_samples[Tglob[Ti]][:,:,151:243]
ASATday_detrend_arcticmean_SON_samples[Tglob[Ti]] = ASATday_detrend_arcticmean_samples[Tglob[Ti]][:,:,243:334]
ASATday_detrend_arcticmean_seasonal_samples["DJF"][Tglob[Ti]] = np.append(ASATday_detrend_arcticmean_samples[Tglob[Ti]][:,:,-31:],ASATday_detrend_arcticmean_samples[Tglob[Ti]][:,:,:59],axis=2)
ASATday_detrend_arcticmean_seasonal_samples["MAM"][Tglob[Ti]] = ASATday_detrend_arcticmean_samples[Tglob[Ti]][:,:,59:151]
ASATday_detrend_arcticmean_seasonal_samples["JJA"][Tglob[Ti]] = ASATday_detrend_arcticmean_samples[Tglob[Ti]][:,:,151:243]
ASATday_detrend_arcticmean_seasonal_samples["SON"][Tglob[Ti]] = ASATday_detrend_arcticmean_samples[Tglob[Ti]][:,:,243:334]
```
%% Cell type:markdown id:5607d7f9-6410-4453-94ef-8b45cde1200b tags:
%% Cell type:code id:1526aba2-1c0a-4598-b82e-5f09f1fb5b50 tags:
## Anomalies
``` python
# Compute anomalies
%% Cell type:code id:9a37cbc2-a542-4d62-9892-0c357a1f73c5 tags:
# Define the number of ensembles and dimensions
seasons = ["DJF", "MAM", "JJA", "SON"]
season_lengths = {"DJF": 90, "MAM": 92, "JJA": 92, "SON": 91}
``` python
#MPI-ESM1-2-LR
# Initialize arrays for daily and seasonal temperatures
ASATday = np.zeros((50, 251, 365))
ASATday_seasonal = {season: np.zeros((50, 251, season_lengths[season])) for season in seasons}
# Load Arctic mean daily and seasonal temperatures
for i in range(50):
# Load daily temperatures
file = data_path + "arctic-mean/tas_hist_ssp585_r"+str(i+1)+"_arctic-mean.nc"
with xr.open_dataset(file) as ds:
ASATday[i, :, :] = ds['tas'].values.reshape((251, 365)) - 273.15
# Load seasonal temperatures
for season in seasons:
file = data_path + "arctic-mean/tas_hist_ssp585_r"+str(i+1)+"_arctic-mean_" +str(season) +".nc"
with xr.open_dataset(file) as ds:
ASATday_seasonal[season][i, :, :] = ds['tas'].values.reshape((251, season_lengths[season])) - 273.15
# Compute anomaly reference
Tzero_ASATday = np.mean(ASATday[:, 0:51, :])
Tzero_ASATday_seasonal = {season: np.mean(ASATday_seasonal[season][:, 0:51, :]) for season in seasons}
# Compute anomalies for GWL samples
ASATaday_detrend_arcticmean_samples = {Tglob[Ti]: ASATday_detrend_arcticmean_samples[Tglob[Ti]] - Tzero_ASATday for Ti in range(3)}
ASATaday_detrend_arcticmean_seasonal_samples = {
season: {Tglob[Ti]: ASATday_detrend_arcticmean_samples[Tglob[Ti]] - Tzero_ASATday_seasonal[season] for Ti in range(3)}
for season in seasons
}
# Free up space
del ASATday, ASATday_seasonal
```
%% Cell type:raw id:228fb1be-3f27-4c5b-a343-23b525b81e3c tags:
# Compute anomalies
# Load Arctic mean daily temperatures and compute anomaly reference
path=data_path+'arctic-mean/'
ASATday = np.zeros((50,251,365))
ASATday_DJF = np.zeros((50,251,90))
ASATday_MAM = np.zeros((50,251,92))
ASATday_JJA = np.zeros((50,251,92))
ASATday_SON = np.zeros((50,251,91))
for i in range(50):
file = path+"tas_hist_ssp585_r"+str(i+1)+"_arctic-mean.nc"
ASATday[i,:,:]=np.array(xr.open_dataset(file)['tas']).reshape((251,365))-273.15
file = path+"tas_hist_ssp585_r"+str(i+1)+"_arctic-mean_DJF.nc"
ASATday_DJF[i,:]=np.array(xr.open_dataset(file)['tas']).reshape((251,90))-273.15
file = path+"tas_hist_ssp585_r"+str(i+1)+"_arctic-mean_MAM.nc"
ASATday_MAM[i,:]=np.array(xr.open_dataset(file)['tas']).reshape((251,92))-273.15
file = path+"tas_hist_ssp585_r"+str(i+1)+"_arctic-mean_JJA.nc"
ASATday_JJA[i,:]=np.array(xr.open_dataset(file)['tas']).reshape((251,92))-273.15
file = path+"tas_hist_ssp585_r"+str(i+1)+"_arctic-mean_SON.nc"
ASATday_SON[i,:]=np.array(xr.open_dataset(file)['tas']).reshape((251,91))-273.15
Tzero_ASATday = np.mean(ASATday[:,0:51,:])
ASATaday = ASATday-Tzero_ASATday
Tzero_ASATday_DJF = np.mean(ASATday_DJF[:,0:51,:])
ASATaday_DJF = ASATday_DJF-Tzero_ASATday_DJF
Tzero_ASATday_MAM = np.mean(ASATday_MAM[:,0:51,:])
ASATaday_MAM = ASATday_MAM-Tzero_ASATday_MAM
Tzero_ASATday_JJA = np.mean(ASATday_JJA[:,0:51,:])
ASATaday_JJA = ASATday_JJA-Tzero_ASATday_JJA
Tzero_ASATday_SON = np.mean(ASATday_SON[:,0:51,:])
ASATaday_SON = ASATday_SON-Tzero_ASATday_SON
#anomalies
# Compute anomalies
ASATaday_detrend_arcticmean_samples = dict()
ASATaday_detrend_arcticmean_DJF_samples = dict()
ASATaday_detrend_arcticmean_MAM_samples = dict()
ASATaday_detrend_arcticmean_JJA_samples = dict()
ASATaday_detrend_arcticmean_SON_samples = dict()
for Ti in range(3):
ASATaday_detrend_arcticmean_samples[Tglob[Ti]] = ASATday_detrend_arcticmean_samples[Tglob[Ti]] - Tzero_ASATday
ASATaday_detrend_arcticmean_DJF_samples[Tglob[Ti]] = ASATday_detrend_arcticmean_DJF_samples[Tglob[Ti]] - Tzero_ASATday_DJF
ASATaday_detrend_arcticmean_MAM_samples[Tglob[Ti]] = ASATday_detrend_arcticmean_MAM_samples[Tglob[Ti]] - Tzero_ASATday_MAM
ASATaday_detrend_arcticmean_JJA_samples[Tglob[Ti]] = ASATday_detrend_arcticmean_JJA_samples[Tglob[Ti]] - Tzero_ASATday_JJA
ASATaday_detrend_arcticmean_SON_samples[Tglob[Ti]] = ASATday_detrend_arcticmean_SON_samples[Tglob[Ti]] - Tzero_ASATday_SON
```
%% Cell type:markdown id:4bf105f6-6ca9-42aa-97aa-2de480671210 tags:
%% Cell type:code id:1e4834d6-fa96-448d-9983-aea725ed380b tags:
## Remove seasonal cycle
``` python
# Remove seasonal cycle
%% Cell type:code id:dfce4f1b-72a1-4011-994b-4a2b92e7952a tags:
# Compute seasonal cycle
ASATaday_detrend_arcticmean_SC_samples = {
Tglob[Ti]: np.mean(ASATaday_detrend_arcticmean_samples[Tglob[Ti]], axis=(0, 1))
for Ti in range(3)
}
ASATaday_detrend_arcticmean_SC_seasonal_samples = {
season: {
Tglob[Ti]: np.mean(ASATaday_detrend_arcticmean_seasonal_samples[season][Tglob[Ti]], axis=(0, 1))
for Ti in range(3)
}
for season in ["DJF", "MAM", "JJA", "SON"]
}
# Subtract seasonal cycle
ASATaday_detrend_arcticmean_deseasonalized_samples = {
Tglob[Ti]: ASATaday_detrend_arcticmean_samples[Tglob[Ti]] - ASATaday_detrend_arcticmean_SC_samples[Tglob[Ti]][np.newaxis, np.newaxis, :] + np.mean(ASATaday_detrend_arcticmean_samples[Tglob[Ti]])
for Ti in range(3)
}
ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples = {
season: {
Tglob[Ti]: ASATaday_detrend_arcticmean_seasonal_samples[season][Tglob[Ti]] - ASATaday_detrend_arcticmean_SC_seasonal_samples[season][Tglob[Ti]][np.newaxis, np.newaxis, :] + np.mean(ASATaday_detrend_arcticmean_seasonal_samples[season][Tglob[Ti]])
for Ti in range(3)
}
for season in ["DJF", "MAM", "JJA", "SON"]
}
```
%% Cell type:raw id:dceb4fce-3bf0-4c70-a306-70ccb2803d9e tags:
``` python
#seasonal cycle detrend_arcticmeaned
ASATaday_detrend_arcticmean_SC_samples = dict()
ASATaday_detrend_arcticmean_SC_DJF_samples = dict()
ASATaday_detrend_arcticmean_SC_MAM_samples = dict()
ASATaday_detrend_arcticmean_SC_JJA_samples = dict()
ASATaday_detrend_arcticmean_SC_SON_samples = dict()
for Ti in range(3):
ASATaday_detrend_arcticmean_SC_samples[Tglob[Ti]] = np.mean(ASATaday_detrend_arcticmean_samples[Tglob[Ti]],axis=(0,1))
ASATaday_detrend_arcticmean_SC_DJF_samples[Tglob[Ti]] = np.mean(ASATaday_detrend_arcticmean_DJF_samples[Tglob[Ti]],axis=(0,1))
ASATaday_detrend_arcticmean_SC_MAM_samples[Tglob[Ti]] = np.mean(ASATaday_detrend_arcticmean_MAM_samples[Tglob[Ti]],axis=(0,1))
ASATaday_detrend_arcticmean_SC_JJA_samples[Tglob[Ti]] = np.mean(ASATaday_detrend_arcticmean_JJA_samples[Tglob[Ti]],axis=(0,1))
ASATaday_detrend_arcticmean_SC_SON_samples[Tglob[Ti]] = np.mean(ASATaday_detrend_arcticmean_SON_samples[Tglob[Ti]],axis=(0,1))
#seasonal cycle detrend_arcticmeaned (anomalies)
ASATday_detrend_arcticmean_SC_samples = dict()
ASATday_detrend_arcticmean_SC_DJF_samples = dict()
ASATday_detrend_arcticmean_SC_MAM_samples = dict()
ASATday_detrend_arcticmean_SC_JJA_samples = dict()
ASATday_detrend_arcticmean_SC_SON_samples = dict()
for Ti in range(3):
ASATday_detrend_arcticmean_SC_samples[Tglob[Ti]] = np.mean(ASATday_detrend_arcticmean_samples[Tglob[Ti]],axis=(0,1))
ASATday_detrend_arcticmean_SC_DJF_samples[Tglob[Ti]] = np.mean(ASATday_detrend_arcticmean_DJF_samples[Tglob[Ti]],axis=(0,1))
ASATday_detrend_arcticmean_SC_MAM_samples[Tglob[Ti]] = np.mean(ASATday_detrend_arcticmean_MAM_samples[Tglob[Ti]],axis=(0,1))
ASATday_detrend_arcticmean_SC_JJA_samples[Tglob[Ti]] = np.mean(ASATday_detrend_arcticmean_JJA_samples[Tglob[Ti]],axis=(0,1))
ASATday_detrend_arcticmean_SC_SON_samples[Tglob[Ti]] = np.mean(ASATday_detrend_arcticmean_SON_samples[Tglob[Ti]],axis=(0,1))
#subtract seasonal cycle
ASATaday_detrend_arcticmean_deseasonalized_samples = dict()
ASATaday_detrend_arcticmean_deseasonalized_DJF_samples = dict()
ASATaday_detrend_arcticmean_deseasonalized_MAM_samples = dict()
ASATaday_detrend_arcticmean_deseasonalized_JJA_samples = dict()
ASATaday_detrend_arcticmean_deseasonalized_SON_samples = dict()
for Ti in range(3):
ASATaday_detrend_arcticmean_deseasonalized_samples[Tglob[Ti]] = ASATaday_detrend_arcticmean_samples[Tglob[Ti]]-ASATaday_detrend_arcticmean_SC_samples[Tglob[Ti]][np.newaxis,np.newaxis,:]+np.mean(ASATaday_detrend_arcticmean_samples[Tglob[Ti]])
ASATaday_detrend_arcticmean_deseasonalized_DJF_samples[Tglob[Ti]] = ASATaday_detrend_arcticmean_DJF_samples[Tglob[Ti]]-ASATaday_detrend_arcticmean_SC_DJF_samples[Tglob[Ti]][np.newaxis,np.newaxis,:]+np.mean(ASATaday_detrend_arcticmean_DJF_samples[Tglob[Ti]])
ASATaday_detrend_arcticmean_deseasonalized_MAM_samples[Tglob[Ti]] = ASATaday_detrend_arcticmean_MAM_samples[Tglob[Ti]]-ASATaday_detrend_arcticmean_SC_MAM_samples[Tglob[Ti]][np.newaxis,np.newaxis,:]+np.mean(ASATaday_detrend_arcticmean_MAM_samples[Tglob[Ti]])
ASATaday_detrend_arcticmean_deseasonalized_JJA_samples[Tglob[Ti]] = ASATaday_detrend_arcticmean_JJA_samples[Tglob[Ti]]-ASATaday_detrend_arcticmean_SC_JJA_samples[Tglob[Ti]][np.newaxis,np.newaxis,:]+np.mean(ASATaday_detrend_arcticmean_JJA_samples[Tglob[Ti]])
ASATaday_detrend_arcticmean_deseasonalized_SON_samples[Tglob[Ti]] = ASATaday_detrend_arcticmean_SON_samples[Tglob[Ti]]-ASATaday_detrend_arcticmean_SC_SON_samples[Tglob[Ti]][np.newaxis,np.newaxis,:]+np.mean(ASATaday_detrend_arcticmean_SON_samples[Tglob[Ti]])
```
%% Cell type:markdown id:763c3184-d121-457d-9ca3-07079b1b9779 tags:
# PDF plots
%% Cell type:code id:069eda86-b8e9-4ffa-be16-8fd2b2871e89 tags:
``` python
seasons = ['annual', 'DJF', 'MAM', 'JJA', 'SON']
dfs = []
for season in seasons:
if season == 'annual':
data = ASATaday_detrend_arcticmean_deseasonalized_samples
else:
data = ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples[season]
df = pd.DataFrame({
'T0': np.ravel(data["T0"]),
'T15': np.ravel(data["T15"]),
'T27': np.ravel(data["T27"]),
'Data': season
})
dfs.append(df)
# Concatenate all DataFrames
df = pd.concat(dfs, ignore_index=True)
# Plotting
plt.figure(figsize=(8, 6))
fig, axes = joyplot(
data=df,
columns=gwl_levels,
by='Data',
x_range=[-7, 17],
color=colors_gwl,
overlap=0.2,
alpha=0.5
)
# Add text annotations
plt.text(-6.5, 0.95, 'Global warming level:', ha='center', color='black', fontsize=12)
plt.text(-0.2, 0.95, 'pre-industrial', ha='center', color=colors_gwl[0], fontsize=12, fontweight='bold')
plt.text(4, 0.95, '1.5°C', ha='center', color=colors_gwl[1], fontsize=12, fontweight='bold')
plt.text(7, 0.95, '2.7°C', ha='center', color=colors_gwl[2], fontsize=12, fontweight='bold')
plt.xlabel('Arctic mean SAT anomaly [°C]')
plt.show()
```
%% Output
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[20], line 6
4 # Create DataFrames for each season
5 for season in seasons:
----> 6 sample_data = globals()[ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples[season]]
7 df = pd.DataFrame({
8 'T0': np.ravel(sample_data["T0"]),
9 'T15': np.ravel(sample_data["T15"]),
10 'T27': np.ravel(sample_data["T27"]),
11 'Data': season
12 })
13 dfs.append(df)
TypeError: unhashable type: 'dict'
%% Cell type:code id:60d77c73-d353-4245-8544-efa76bc89016 tags:
``` python
df_annual = pd.DataFrame(data={'T0': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_samples["T0"]), 'T15': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_samples["T15"]), 'T27': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_samples["T27"]), 'Data': 'annual'})
df_DJF = pd.DataFrame(data={'T0': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples["DJF"]["T0"]), 'T15': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples["DJF"]["T15"]), 'T27': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples["DJF"]["T27"]), 'Data': 'DJF'})
df_MAM = pd.DataFrame(data={'T0': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples["MAM"]["T0"]), 'T15': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples["MAM"]["T15"]), 'T27': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples["MAM"]["T27"]), 'Data': 'MAM'})
df_JJA = pd.DataFrame(data={'T0': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples["JJA"]["T0"]), 'T15': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples["JJA"]["T15"]), 'T27': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples["JJA"]["T27"]), 'Data': 'JJA'})
df_SON = pd.DataFrame(data={'T0': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples["SON"]["T0"]), 'T15': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples["SON"]["T15"]), 'T27': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_seasonal_samples["SON"]["T27"]), 'Data': 'SON'})
df = pd.concat([df_annual,df_DJF,df_MAM,df_JJA,df_SON])
df = df.groupby('Data', sort=False)
# Draw Plot
plt.figure()
fig, axes = joypy.joyplot(df,
column=['T0','T15','T27'],
by='Data',
x_range=[-7,17],
color=colors_gwl,
overlap=0.2,
alpha=0.5,
figsize=(8,6))
plt.text(-6.5,0.95,'Global warming level:',ha='center',color='black',fontsize=12)
plt.text(-0.2,0.95,'pre-industrial',ha='center',color=colors_gwl[0],fontsize=12,fontweight='bold')
plt.text(4,0.95,'1.5°C',ha='center',color=colors_gwl[1],fontsize=12,fontweight='bold')
plt.text(7,0.95,'2.7°C',ha='center',color=colors_gwl[2],fontsize=12,fontweight='bold')
plt.xlabel('Arctic mean SAT anomaly [°C]')
#plt.savefig('ASATaday_pdfs_allseasons.png',dpi=300)
plt.show()
```
%% Output
%% Cell type:code id:b7b745bf-25b4-4345-962f-56fb7cd4dc0d tags:
``` python
df_annual = pd.DataFrame(data={'T0': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_samples["T0"]), 'T15': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_samples["T15"]), 'T27': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_samples["T27"]), 'Data': 'annual'})
df_DJF = pd.DataFrame(data={'T0': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_DJF_samples["T0"]), 'T15': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_DJF_samples["T15"]), 'T27': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_DJF_samples["T27"]), 'Data': 'DJF'})
df_MAM = pd.DataFrame(data={'T0': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_MAM_samples["T0"]), 'T15': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_MAM_samples["T15"]), 'T27': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_MAM_samples["T27"]), 'Data': 'MAM'})
df_JJA = pd.DataFrame(data={'T0': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_JJA_samples["T0"]), 'T15': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_JJA_samples["T15"]), 'T27': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_JJA_samples["T27"]), 'Data': 'JJA'})
df_SON = pd.DataFrame(data={'T0': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_SON_samples["T0"]), 'T15': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_SON_samples["T15"]), 'T27': np.ravel(ASATaday_detrend_arcticmean_deseasonalized_SON_samples["T27"]), 'Data': 'SON'})
df = pd.concat([df_annual,df_DJF,df_MAM,df_JJA,df_SON])
df = df.groupby('Data', sort=False)
# Draw Plot
plt.figure()
fig, axes = joypy.joyplot(df,
column=['T0','T15','T27'],
by='Data',
x_range=[-7,17],
color=colors_gwl,
overlap=0.2,
alpha=0.5,
figsize=(8,6))
plt.text(-6.5,0.95,'Global warming level:',ha='center',color='black',fontsize=12)
plt.text(-0.2,0.95,'pre-industrial',ha='center',color=colors_gwl[0],fontsize=12,fontweight='bold')
plt.text(4,0.95,'1.5°C',ha='center',color=colors_gwl[1],fontsize=12,fontweight='bold')
plt.text(7,0.95,'2.7°C',ha='center',color=colors_gwl[2],fontsize=12,fontweight='bold')
plt.xlabel('Arctic mean SAT anomaly [°C]')
#plt.savefig('ASATaday_pdfs_allseasons.png',dpi=300)
plt.show()
```
%% Output
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment