python绘图--由逐日风场数据计算月平均风场数据并绘制二维填色图

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: python绘图--由逐日风场数据计算月平均风场数据并绘制二维填色图

前言



  • 如下图所示,现有1月逐日的一天四次的风场资料,现需要计算1月月平均数据并绘制二维空间填色图
  • 处理思路如下:

1、通过for循环读取数据

2、对于读取的日数据按照时间维求平均,将一天四次的资料处理为日平均资料

3、读取风速分量,将一个月内所以日平均资料存到一个空矩阵中

4、计算存储的风速矩阵,按照时间维求平均得到月平均数据

5、将月平均数据进行绘图

  • 注意点:
  • 对于数据名称比较统一,使用字符串进行循环读取
  • 考虑到数据大小,可以在读取数据时截取部分区域,节省时间
  • 先读取一个数据查看要设置的矩阵的size


918d196ecd414c0cbd9c3c5a2c58b69f.png

4229c09cba014425aee1c9644da732eb.png


code:


# -*- coding: utf-8 -*-
"""
Created on %(date)s
@author: %(jixianpu)s
Email : 211311040008@hhu.edu.cn
introduction : keep learning althongh walk slowly
"""
##########导入库###############################################################
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter,LatitudeFormatter
# import glob
##########导入文件、创建空矩阵用来存储日数据################################
str0 = 'D:\mql\wind\\'
str1 = 'CCMP_Wind_Analysis_200001'
str2 = '_V02.0_L3.0_RSS.nc'
u_mean=np.zeros((160,200,31))
u_mean[:] = np.nan
v_mean=np.zeros((160,200,31))
v_mean[:] = np.nan
##########循环读入日数据、将存储的日数据求平均,得到月平均########################
i = 0
for i in range(1,31):
    file=str0+str1+'%02.0f'%(i)+str2
    da=xr.open_dataset(file).sel(longitude=slice(130,180),latitude=slice(-20,20)) #按照经纬度区域读取数据
    da_m = da.mean('time')  #  对数据的时间那一维求平均,使得一天四次的数据为一天一次
    lon  = da.longitude.data
    lat  = da.latitude.data
    u_mean[:,:,i] =da_m.uwnd  #  读取u 分量
    v_mean[:,:,i] =da_m.uwnd  #  读取v 分量
    x,y=np.meshgrid(lon.data,lat.data)
    i=i+1
#################计算月平均数据,按照时间纬度计算################################
u_monthlymean =np.nanmean(u_mean,axis=2)
v_monthlymean =np.nanmean(v_mean,axis=2)
##########读取经纬度############################################################
##########计算月均的实际风速####################################################
w =  np.sqrt(u_monthlymean*u_monthlymean+v_monthlymean*v_monthlymean)
##########封装绘图函数、保护绘图区域、投影、陆地、标题、字体大小#########################
def make_map(ax, title):
    # set_extent  set crs
    ax.set_extent(box, crs=ccrs.PlateCarree())
    land = cfeature.NaturalEarthFeature('physical',
                                        'land',
                                        scale,
                                        edgecolor='grey', 
                                        facecolor='white'
                                        ,zorder=2
                                        )
    ax.add_feature(land)  # set land color
    ax.coastlines(scale)  # set coastline resolution
    # set coordinate axis
    ax.set_xticks(np.arange(box[0],box[1]+10, xstep),crs=ccrs.PlateCarree())
    ax.set_yticks(np.arange(box[2], box[3]+10, ystep),crs=ccrs.PlateCarree())
    ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label =False))#经度0不加标识
    ax.yaxis.set_major_formatter(LatitudeFormatter())
    # plt.tick_params(labelsize=25)
    ax.set_title(title, fontsize=20, loc='left',pad=12)
    # ax.yaxis.set_minor_locator(AutoMinorLocator(5))
    # ax.xaxis.set_minor_locator(AutoMinorLocator(10))
    ax.tick_params(which='minor', 
                    direction='out', length=4,width=0.59,
                    right=True, top=True)
    ax.tick_params(which='major', 
                    direction='out', 
                    length=8,
                    width=0.99, 
                    pad=3, 
                    labelsize=12,
                    bottom=True, left=True, right=True, top=True)
    return ax
##########绘图区域、投影陆地的分辨率、经度、纬度的间隔############################
box = [130, 180, -20, 20]  
scale = '50m'            
xstep, ystep = 10, 10 
##########进行绘图,设置一个画板##################################
fig =plt.figure(figsize=(12,10),dpi=100)
ax=fig.add_subplot(1,1,1,projection=ccrs.PlateCarree(central_longitude=180))
make_map(ax,'monthly_mean-surface winds')
ax.set_xlabel('Longitude',fontsize=14)  # 添加经度标签
ax.set_ylabel('Latitude',fontsize=14)   # 添加纬度标签
step=10# 设置风场的数据读取间隔
c=ax.contourf(lon,lat,w,transform=ccrs.PlateCarree(),extend='both')  #绘制填色图
ax.quiver(x[::step,::step],y[::step,::step],u_monthlymean[::step,::step],v_monthlymean[::step,::step],pivot='mid',transform=ccrs.PlateCarree(),
          width=0.002,scale=200,headlength=5,headwidth=4,
        )  #绘制风场箭头
#添加colorbar
cb=fig.colorbar(c,shrink=0.75,pad=0.04)   
cb.ax.tick_params(labelsize=10)  #设置colorbar的字体大小
cb.ax.set_title('$m/s$',fontsize=15)  #设置colorbar的标题,字体大小


相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
存储 程序员 Python
小白也能用的代码!1行Python,把PPT转成1张长图
大家好,我是程序员晚枫。今天介绍`python-office`库的新功能:仅用1行Python代码将PPT转为单张长图。
156 11
 小白也能用的代码!1行Python,把PPT转成1张长图
|
算法 Python
Python 大神修炼手册:图的深度优先&广度优先遍历,深入骨髓的解析
【7月更文挑战第12天】Python进阶必学:DFS和BFS图遍历算法。理解图概念,用邻接表建无向图,实现DFS和BFS。DFS适用于查找路径,BFS解决最短路径。通过实例代码加深理解,提升编程技能。
118 4
|
算法 Python
逆袭之路!用 Python 玩转图的 DFS 与 BFS,让数据结构难题无处遁形
【7月更文挑战第12天】图的遍历利器:DFS 和 BFS。Python 中,图可表示为邻接表或矩阵。DFS 沿路径深入,回溯时遍历所有可达顶点,适合找路径和环。BFS 层次遍历,先近后远,解决最短路径问题。两者在迷宫、网络路由等场景各显神通。通过练习,掌握这些算法,图处理将游刃有余。
151 3
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
136 1
教大家用 Python 绘制几棵圣诞树~
今天分享五种用 Python 绘制圣诞树的方法,从基础到高级,效果也不断攀升分为 1 到 5 五个 Level 水平;
教大家用 Python 绘制几棵圣诞树~
|
Java Python
|
6月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
3月前
|
Python
Python编程基石:整型、浮点、字符串与布尔值完全解读
本文介绍了Python中的四种基本数据类型:整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。整型表示无大小限制的整数,支持各类运算;浮点型遵循IEEE 754标准,需注意精度问题;字符串是不可变序列,支持多种操作与方法;布尔型仅有True和False两个值,可与其他类型转换。掌握这些类型及其转换规则是Python编程的基础。
196 33
|
2月前
|
数据采集 分布式计算 大数据
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
71 1

推荐镜像

更多