三个月滑动平均Nino3.4指数随时间的变化图

功能

  1. 显示了三个月滑动平均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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值