赞
踩
第一部分:数据下载
文件地址: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()
结果如下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。