IOD’s impact after removing the impact of ENSO

IOD: Indian Ocean Dipole

Load Modules

[1]:
import numpy as np
import sacpy as scp
import matplotlib.pyplot as plt

Load SST Data

[2]:
# load sst
sst = scp.load_sst()['sst']
sst
[2]:
<xarray.DataArray 'sst' (time: 372, lat: 13, lon: 57)>
[275652 values with dtype=float64]
Coordinates:
  * time     (time) datetime64[ns] 1991-01-16T12:00:00 ... 2021-12-16T12:00:00
  * lon      (lon) int64 20 25 30 35 40 45 50 55 ... 270 275 280 285 290 295 300
  * lat      (lat) int64 -30 -25 -20 -15 -10 -5 0 5 10 15 20 25 30
[3]:
# get ssta
ssta = scp.get_anom(sst,method=1)
# ssta[0].plot()

Get Nino3.4 and IOD index

[4]:
# calculate Nino3.4
Nino34 = ssta.loc[:,-5:5,190:240].mean(axis=(1,2))
[5]:
IODW = ssta.loc[:,-10:10,50:70].mean(axis=(1,2))
IODE = ssta.loc[:,-10:0,90:110].mean(axis=(1,2))
IODI = +IODW - IODE

build Data for MLR

[6]:
X = np.vstack([np.array(Nino34),np.array(IODI)]).T
# multiple linear regression
MLR = scp.MultLinReg(X,np.array(ssta))
[7]:
MLR
[7]:
MultLinReg, x.shape = (372, 2), y.shape = (372, 13, 57)

Plot

[8]:
import sacpy.Map
import cartopy.crs as ccrs
fig = plt.figure(figsize=[7, 3])
ax = plt.axes(projection=ccrs.PlateCarree(central_longitude=180))
lon ,lat = np.array(ssta.lon) , np.array(ssta.lat)
m = ax.scontourf(lon,lat,MLR.slope[1])
n = ax.sig_plot(lon,lat,MLR.pv_i[1],color="k",marker="..")
ax.init_map(stepx=50, smally=2.5)
plt.colorbar(m)
plt.savefig("../pic/MLR.png",dpi=200)
<Figure size 640x480 with 0 Axes>
../_images/notebooks_IODI_nino34_ssta_partial_13_1.png