Python绘制Nino3.4指数年际变化图学习笔记

第一部分:数据下载

文件地址:https://psl.noaa.gov/data/gridded/data.noaa.ersst.v4.html

第二部分:数据处理并绘图

# 导入库
import numpy as np
import matplotlib.pyplot as plt
import netCDF4 as nc
# 设置中英文字体
from matplotlib import rcParams
config = {
    "font.family":'serif',
    "font.size": 14,
    "mathtext.fontset":'stix',
    "font.serif": ['Times New Roman']}
rcParams.update(config)
#读取nc文件
f= nc.Dataset(path)
# time<1994> 1994/12=166,即每月测量的平均气温,总共有1994个月,精度为2°
nsst=f.variables['sst'][1512:-1,42:47,95:121]#1980-2020
nsst1 = f.variables['sst'][1512:1884,42:47,95:121]#1980-2010平均海温
'''
厄尔尼诺/拉尼娜事件的主要监测关键区,包括NINO1+2区(90°W-80°W,10°S-0°)、
NINO3区(150°W-90°W,5°S-5°N)、NINO4区(160°E-150°W,5°S-5°N)
和NINO3.4区(170°W-120°W,5°S-5°N)。
'''
#计算参考https://northfar.net/nino-intro/
#计算多年每个月的平均海温
list=[]
for i in range(0,12):
    a = np.mean(nsst1[i:-1:12,:,:],axis=0)
    list.append(a)
#将每个月的平均海温取出,在nsst中减去
# 将每个月的平均海温从nsst中减去
anomalies = nsst.copy()
for i in range(0, 12):
    anomalies[i:-1:12, :, :] -= l[i]
#计算区域平均nino3.4指数
a = np.mean(anomalies, axis=(1, 2))
a = a[:-1]
time = np.arange(1980 , 2020, 1/12)  # 修改这里,确保与数据的时间范围一致
#绘图
plt.figure(figsize=(20, 9))
plt.plot(time, a, 'black', alpha=1, linewidth=2)
plt.fill_between(time, 0, a, a > 0,
                 color='red', alpha=0.75)
plt.fill_between(time, 0, a, a < 0,
                 color='blue', alpha=0.75)
plt.xlabel('Years')
plt.ylabel('Nino3.4 sst Anomaly[$^oC$]')
plt.title('Historical Nino3.4 SSTA 40-year (1980-2020)', fontsize=17)
# 设置 y 轴范围和刻度间隔
plt.ylim(-2.5, 3)
plt.yticks(np.arange(-2.5, 3.5, 0.5))
plt.axhline(y=0.5,c='k',lw=0.8,ls='--')
plt.axhline(y=-0.5,c='k',lw=0.8,ls='--')
plt.show()

结果如下

作者:Chen learner

物联沃分享整理
物联沃-IOTWORD物联网 » Python绘制Nino3.4指数年际变化图学习笔记

发表回复