功能:
- 显示了三个月滑动平均Nino3.4指数随时间的变化图,并采用不同颜色分别填充了正值和负值区域
程序清单:
#导入包
import numpy as np
import xarray as xr
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
#读入海温异常数据
data = xr.open_dataset('F:/python/data/6.34.4_nino34.nc')
nino34 = np.array(data['nino34'])
#绘图
#统一修改字体为Arial
plt.rcParams['font.family'] = ['Arial']
def plot_moving(y):
#分别设置每个子图的时间坐标,创建2015年开始、间隔一年、与nino34长度一致的时间序列
x = range(len(y))
year_name = pd.date_range('2015-01','2102-12',freq='YE')
x1=x[0:263]
y1=y[0:263]
year_name1=year_name[0:23]
x2=x[263:527]
y2=y[263:527]
year_name2=year_name[22:45]
x3=x[527:791]
y3=y[527:791]
year_name3=year_name[44:67]
x4=x[791:1032]
y4=y[791:1032]
year_name4=year_name[66:88]
#创建画布,画布大小15*10,分辨率300,4行1列4个子图
fig = plt.figure(figsize=(15,10),dpi=300)
ax1=plt.subplot(4,1,1)
#画曲线,lw设置线宽,label设置图例
plt.plot(x1,y1,lw=1, color='black')
#垂直于x轴画网格线,线型为虚线,axis='y'则垂直于y轴
plt.grid(linestyle='--',axis='x')
#设置y轴主刻度间隔为1
ax1.yaxis.set_major_locator(MultipleLocator(1))
#设置y轴次刻度间隔为0.2
ax1.yaxis.set_minor_locator(MultipleLocator(0.2))
#设置x轴刻度
ax1.set_xticks(np.linspace(0,262,23))
#设置x轴刻度标签,fontname设置字体
ax1.set_xticklabels(year_name1.year,fontname="Arial")
#填色
#x1:第一个参数表示覆盖的区域,此处表示整个x都覆盖;0:表示覆盖的下限
#y1:表示覆盖的上限是y1这个曲线;y1<0:表示只覆盖y1<0的区域
#color:覆盖区域的颜色;alpha:覆盖区域的透明度[0,1],其值越大,表示越不透明
plt.fill_between(x1,0,y1,y1<0, color='blue')
plt.fill_between(x1,0,y1,y1>0, color='red')
plt.xlim(0,262)
plt.ylim(-3,3)
plt.tick_params(labelsize=12)
#画直线(参考线),color设置曲线颜色,linestyle设置线型
plt.axhline(y=0, color='black', lw=1,linestyle='-')
ax2=plt.subplot(4,1,2)
plt.plot(x2,y2,lw=1, color='black')
plt.grid(linestyle='--',axis='x')
ax2.yaxis.set_major_locator(MultipleLocator(1))
ax2.yaxis.set_minor_locator(MultipleLocator(0.2))
ax2.set_xticks(np.linspace(263,526,23))
ax2.set_xticklabels(year_name2.year,fontname="Calibri")
plt.fill_between(x2,0,y2,y2<0, color='blue')
plt.fill_between(x2,0,y2,y2>0, color='red')
plt.xlim(262,526)
plt.ylim(-3,3)
plt.tick_params(labelsize=12)
plt.axhline(y=0, color='black', lw=1,linestyle='-')
ax3=plt.subplot(4,1,3)
plt.plot(x3,y3,lw=1, color='black')
plt.grid(linestyle='--',axis='x')
ax3.yaxis.set_major_locator(MultipleLocator(1))
ax3.yaxis.set_minor_locator(MultipleLocator(0.2))
ax3.set_xticks(np.linspace(527,789,23))
ax3.set_xticklabels(year_name3.year,fontname="Calibri")
plt.fill_between(x3,0,y3,y3<0, color='blue')
plt.fill_between(x3,0,y3,y3>0, color='red')
plt.xlim(526,789)
plt.ylim(-3,3)
plt.tick_params(labelsize=12)
plt.axhline(y=0, color='black', lw=1,linestyle='-')
ax4=plt.subplot(4,1,4)
plt.plot(x4,y4,lw=1, color='black')
plt.grid(linestyle='--',axis='x')
ax4.yaxis.set_major_locator(MultipleLocator(1))
ax4.yaxis.set_minor_locator(MultipleLocator(0.2))
ax4.set_xticks(np.linspace(790,1052,21))
ax4.set_xticklabels(year_name4.year,fontname="Calibri")
plt.fill_between(x4,0,y4,y4<0, color='blue')
plt.fill_between(x4,0,y4,y4>0, color='red')
plt.xlim(789,1052)
plt.ylim(-3,3)
plt.tick_params(labelsize=12)
plt.axhline(y=0, color='black', lw=1,linestyle='-')
return fig
fig = plot_moving(nino34)
plt.show()