python 全球降水四季空间分布图 居中经线问题

该代码用于绘制全球季节性平均降水的空间分布图。利用netCDF4和cartopy库读取并处理数据,通过循环计算特定季节(MAM, JAS, SON, DJS)的平均值,并使用contourf绘制等值线图。地图上标注了关键经线和纬度,且提供了颜色条以显示降水强度。
摘要由CSDN通过智能技术生成
# -*- coding: utf-8 -*-
"""
@Features: 空间分布图 季节平均
@Date:2022/4/30
"""
import matplotlib.pyplot as plt
import numpy as np
import netCDF4 as nc
import cartopy.crs as ccrs
from cartopy.util import add_cyclic_point


def sea_mean(start):
    temp = []
    for i in range(start, 468, 12):
        temp.append(i)
        temp.append(i + 1)
        temp.append(i + 2)
    mean_season = np.nanmean(pre[temp, :, :], 0)
    return mean_season


if __name__ == '__main__':
    dataset = nc.Dataset('GPCP.precip.mon.mean.nc')  # 读取数据
    print(dataset.variables.keys())  # 输出所有变量
    lon = dataset.variables['lon'][:].data  # 读取经度
    lat = dataset.variables['lat'][:].data  # 读取维度
    time = dataset.variables['time']  # 读取时间
    real_time = nc.num2date(time, time.units).data  # 转成时间格式
    pre = dataset.variables['precip'][:].data  # 读取降水
    pre[pre < 0] = np.nan
    # 绘图
    fig = plt.figure()  # 设置一个画板,将其返还给fig
    for i in range(4):
        mon = [3, 6, 9, 12]
        title = ['MAM', 'JAS', 'SON', 'DJS']
        ax = fig.add_subplot(2, 2, i + 1,
                             projection=ccrs.PlateCarree(central_longitude=180),
                             facecolor='gray')# 改动了居中经线后,横坐标的经纬度维持不变!!!后续的绘图要根据原始的-180~180的横坐标绘制
        ax.coastlines()
        # 消除白线
        cycle_data, cycle_lon = add_cyclic_point(sea_mean(mon[i]), coord=lon)
        cycle_LON, cycle_LAT = np.meshgrid(cycle_lon, lat)
        cs = ax.contourf(cycle_LON-180, cycle_LAT, cycle_data,
                         cmap='bwr_r', extend='both',
                         levels=range(0, 12))
        plt.title(title[i])
        plt.plot(range(-180, 180), [0] * 360, 'k--')
        for line in [9-180, 43.5-180, 104-180, 162.5-180, 220.5-180, 280-180, 311-180]:
            plt.plot([line] * 180, range(-90, 90), c='w')
        plt.xticks(range(-180, 180, 60), ['0', '60°E', '120°E', '180°', '120°W', '60°W'],
                   fontsize=10)
        plt.yticks(range(-90, 91, 30), ['90°S', '60°S', '30°S', '0', '30°N', '60°N', '90°N'],
                   fontsize=10)
        plt.colorbar(cs)
    plt.show()


注意:

  1. 改动了居中经线后,横坐标的经纬度维持不变!!!依旧是-180~180°
  2. 降水分布图也要跟着向西平移180度

在这里插入图片描述

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值