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()

结果如下

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值