赞
踩
有几个指标用于监测热带太平洋,所有这些指标都是基于海表温度(SST)异常在一个给定的区域的平均值。通常,异常是相对于30年的周期来计算的。厄尔尼诺3.4指数(Niño 3.4 index)
和海洋厄尔尼诺指数(Oceanic Niño Index (ONI))
是定义厄尔尼诺和拉尼娜事件最常用的指数。其他index
用于帮助描述每个事件的独特性质。
El Niño 1、2、3和4 的范围如下所示:
Niño 1+2 (0-10S,90W-80W)
:
Niño 3(5N-5S,150W-90W)
:
Niño 3.4和 ONI 成为定义厄尔尼诺和拉尼娜事件的首选
。Niño 3.4(5N-5S,170W-120W)
:El Niño or La Niña
是在Niño 3.4 SST 超过 +/-0.4 C 6个月或更长时间内确定的。ONI (5N-5S,170W-120W)
:
异常必须至少连续5个月超过 + 0.5 C 或 -0.5 C
。这是美国国家海洋和大气管理局使用的定义。Niño 4(5N-5S,160E-150W)
:
为了定义每个 El Niño or La Niña
事件的独特性,Trenberth 和 Stepaniak (2001)认为,应该将厄尔尼诺3.4指数与他们引入的一个指数结合使用,这个指数被称为跨尼诺指数(Trans-Niño Index,TNI
)。TN
I 被定义为厄尔尼诺1 + 2和厄尔尼诺4区域之间标准化海表温度异常的差异。TNI 因此测量了赤道太平洋中部和东部海表温度异常的梯度。当海表温度梯度特别大时(比如,由于尼诺4区域的正异常和尼诺1 + 2区域的负异常) ,一些研究人员将该事件归类为“太平洋中部的厄尔尼诺现象”
或“El Niño Modoki
”,尽管将这种类型的事件作为一个单独的现象进行区分是一个问题或争论。
1、选择厄尔尼诺3.4区域(5N-5S,170W-120W)的sst
月平均数据
2、计算Nino 3.4区域内每个月的异常
3、计算每个月异常的区域平均值
4、去线性趋势化处理(也可以不去)
# == netcdf file name and location" fnc = 'oisst_monthly.nc' dmask = xr.open_dataset('lsmask.nc') print(dmask) ds = xr.open_dataset(fnc) print(ds) # === Climatology and Anomalies sst = ds.sst.where(dmask.mask.isel(time=0) == 1) clm = sst.sel(time=slice('1982-01-01','2020-12-01')).groupby('time.month').mean(dim='time') anm = (sst.groupby('time.month') - clm) #print(clm) # -- Detorending def detrend_dim(da, dim, deg=1): # detrend along a single dimension p = da.polyfit(dim=dim, deg=deg) fit = xr.polyval(da[dim], p.polyfit_coefficients) return da - fit def cal_nino34(ds,lat1,lat2,lon1,lon2): ds = ds.sel(lat=slice(lat1,lat2),lon=slice(lon1,lon2)) clm = ds.groupby('time.month').mean(dim='time') an_ds = ds.groupby('time.month') - clm an_ds = an_ds.mean(('lon','lat')) an_ds = detrend_dim(an_ds,dim='time',deg=1) return an_ds nino3_4 = cal_nino34(sst,5,-5,190,240) nino3_4.plot()
还可以对于指数进行平滑,使结果看起来更好看一点。如果指数平滑了,后续计算相关相关时也需要对于输入的其他变量进行统一平滑。
ninoSD=nino3_4/nino3_4.std(dim='time')
rninoSD=ninoSD.rolling(time=3, center=True).mean('time')
相关性和回归分析部分:
Leading:
# -- Running mean ranm = anm.rolling(time=3, center=True).mean('time') rdanm = detrend_dim(ranm,'time',1) # -- Correlation & Regression # Leading corM12 = xr.corr(rninoSD, rdanm.shift(time=-12), dim="time") regM12 = xr.cov( rninoSD, rdanm.shift(time=-12), dim="time")/rninoSD.var(dim='time',skipna=True).values corM6 = xr.corr(rninoSD, rdanm.shift(time=-6), dim="time") regM6 = xr.cov( rninoSD, rdanm.shift(time=-6), dim="time")/rninoSD.var(dim='time',skipna=True).values # simultaneous cor0 = xr.corr(rninoSD, rdanm, dim="time") reg0 = xr.cov(rninoSD, rdanm, dim="time")/rninoSD.var(dim='time',skipna=True).values # Laging corP6 = xr.corr(rninoSD, rdanm.shift(time=6), dim="time") regP6 = xr.cov( rninoSD, rdanm.shift(time=6), dim="time")/rninoSD.var(dim='time',skipna=True).values corP12 = xr.corr(rninoSD, rdanm.shift(time=12), dim="time") regP12 = xr.cov( rninoSD, rdanm.shift(time=12), dim="time")/rninoSD.var(dim='time',skipna=True).values corP18 = xr.corr(rninoSD, rdanm.shift(time=18), dim="time") regP18 = xr.cov( rninoSD, rdanm.shift(time=18), dim="time")/rninoSD.var(dim='time',skipna=True).values
# -- figure plot def makefig(cor, reg,title, grid_space): # 修复 0 度和 360 度经度附近未显示数据的伪影 cor = gvutil.xr_add_cyclic_longitudes(cor, 'lon') reg = gvutil.xr_add_cyclic_longitudes(reg, 'lon') # 添加等距柱面投影,中心经度为210° ax = fig.add_subplot(grid_space, projection=ccrs.PlateCarree(central_longitude=210)) # 添加海岸线 ax.coastlines(linewidth=0.5, alpha=0.6) # 设置坐标范围 gvutil.set_axes_limits_and_ticks(ax, xlim=(-180, 180), ylim=(-90, 90), xticks=np.arange(-180, 180, 60), yticks=np.arange(-90, 90, 30)) # Use geocat.viz.util convenience function to add minor and major tick lines gvutil.add_major_minor_ticks(ax, labelsize=10) # Use geocat.viz.util convenience function to make latitude, longitude tick labels gvutil.add_lat_lon_ticklabels(ax) #设置colorbar newcmp = cmaps.NCV_blu_red index = [5, 20, 35, 50, 65, 85, 95, 110, 125, 0, 0, 135, 150, 165, 180, 200, 210, 220, 235, 250 ] color_list = [newcmp[i].colors for i in index] # 设置colorbar中间颜色为白色 color_list[9]=[ 1., 1., 1.] color_list[10]=[ 1., 1., 1.] # 定义填色图的参数 kwargs = dict( vmin = -1.0, vmax = 1.0, levels = 21, colors=color_list, add_colorbar=False, # allow for colorbar specification later transform=ccrs.PlateCarree(), # ds projection ) # 相关系数的填色图 fillplot = cor.plot.contourf(ax=ax, **kwargs) # 添加陆地、地形 ax.add_feature(cfeature.LAND, facecolor='lightgray', zorder=1) ax.add_feature(cfeature.COASTLINE, edgecolor='gray', linewidth=0.5, zorder=1) # 设置等值线参数 # Specify contour levels excluding 0 delc=0.2 levels = np.arange(-3, 0, delc) levels = np.append(levels, np.arange(delc, 3, delc)) # 回归系数为等值线 rad = reg.plot.contour(ax=ax, colors='black', alpha=0.8, linewidths=1.0, add_labels=False, levels=levels, transform=ccrs.PlateCarree()) pe = [PathEffects.withStroke(linewidth=2.0, foreground="w")] plt.setp(rad.collections, path_effects=pe) # 设置标题、及其位置、大小 gvutil.set_titles_and_labels(ax, lefttitle=title, lefttitlefontsize=16, righttitle='', righttitlefontsize=16, xlabel="", ylabel="") return ax, fillplot # Show the plot fig = plt.figure(figsize=(10, 12),dpi=200) grid = fig.add_gridspec(ncols=2, nrows=3) #grid = fig.add_gridspec(ncols=2, nrows=3, hspace=-0.20) ax1, fill1 = makefig(corP18,regP18,'18-month lag', grid[0,0]) ax2, fill2 = makefig(corP12,regP12,'12-month lag', grid[1,0]) ax3, fill3 = makefig(corP6,regP6,'6-month lag', grid[2,0]) ax4, fill4 = makefig(cor0,reg0,'Simultaneous', grid[0,1]) ax5, fill5 = makefig(corM6,regM6,'6-month lead', grid[1,1]) ax6, fill6 = makefig(corM12,regM12,'12-month lead', grid[2,1]) fig.colorbar(fill6, ax=[ax1, ax2, ax3, ax4, ax5, ax6], drawedges=True, orientation='horizontal', shrink=0.5, pad=0.05, extendfrac='auto', extendrect=True) fig.suptitle('SST correlation & regression with Nino3.4', fontsize=18, y=0.9) plt.draw()
https://climatedataguide.ucar.edu/climate-data/nino-sst-indices-nino-12-3-34-4-oni-and-tni
Trenberth, Kevin & National Center for Atmospheric Research Staff (Eds). Last modified 2024-03-20 "The Climate Data Guide: Nino SST Indices (Nino 1+2, 3, 3.4, 4; ONI and TNI).”
Trenberth, K.E. and Stepaniak, D.P. (2001) Indices of El Nino Evolution. Journal of Climate, 14, 1697-1701.
https://doi.org/10.1175/1520-0442(2001)014<1697:LIOENO>2.0.CO;2https://climate.usu.edu/people/yoshi/pyclm101/index.html
本文由mdnice多平台发布
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。