python 如何绘制全球风场(以2020年月均数据为例)

简介: python 如何绘制全球风场(以2020年月均数据为例)

使用python绘制全球的风场主要用到matplotlib包中:

quiver()

函数,具体参数设置可以查看官网。

数据来源于ERA5的月均10m风矢量资料:ERA5

为了提高运行效率,我将数据重新插值,分辨率为:2.5°x2.5°

下面举个例子进行演示,我只选取2020年的数据,绘制全球范围内,每个月的数据资料,填色为风速大小。

代码很简单,核心代码只有下面一句:


cb=ax.quiver(x[::5,::5],y[::5,::5],u.data[i,:,:][::5,::5],v.data[i,:,:][::5,::5],pivot='mid',\
    width=0.0018,scale=300,transform=ccrs.PlateCarree(),color='k',angles='xy',zorder=1)

需要注意的是,x、y是二维的,也就是需要将读取的经纬度进行np.meshgrid()处理,同时为了绘制的箭头美观,间隔明显,每5个为间隔进行绘制,其他一些设置就是调整箭头长度、宽度、比例、颜色等等,可以根据图像美观设置。


绘制结果如下所示:


image.png


下面是全部代码:


# -*- coding: utf-8 -*-
"""
Created on %(date)s
@author: %(jixianpu)s
introduction : keep learning althongh walk slowly
"""
import cartopy.mpl.ticker as cticker
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
from cartopy.mpl.ticker import LongitudeFormatter ,LatitudeFormatter
import cartopy.crs as ccrs
import cartopy.feature as cfeature
p=r'D:/data.nc'
data=xr.open_dataset(p).sel(time=slice("2020","2020"))
u=data.u10
v=data.v10
w=np.sqrt(u*u+v*v)
lon=data.lon.data
lat=data.lat.data
def make_map(ax, title,box,xstep,ystep):
    # set_extent  set crs
    ax.set_extent(box, crs=ccrs.PlateCarree())
    ax.coastlines(scale)  # set coastline resolution
    # set coordinate axis
    ax.set_xticks(np.arange(box[0], box[1], xstep),crs=ccrs.PlateCarree())
    ax.set_yticks(np.arange(box[2], box[3], ystep),crs=ccrs.PlateCarree())
    ax.xaxis.set_major_formatter(cticker.LongitudeFormatter())
    #经度0不加标识
    ax.yaxis.set_major_formatter(cticker.LatitudeFormatter())
    ax.set_title(title, fontsize=15, loc='center') 
    return ax
fig=plt.figure(figsize=(30,25))
x,y=np.meshgrid(lon,lat)
box1 = [0, 361, -90, 91]  
scale = '50m'            
xstep, ystep = 10, 10  
cmap=plt.get_cmap('Reds')#'RdYlBu_r'
titl=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sept','Oct','Nov','Dec']
for i in range(12):
    print(i)
    proj=ccrs.PlateCarree(central_longitude=180)
    ax=fig.add_subplot(4,3,i+1,projection=proj)
    make_map(ax,str(titl[i]),box1,45,45)
    cb=ax.quiver(x[::5,::5],y[::5,::5],u.data[i,:,:][::5,::5],v.data[i,:,:][::5,::5],pivot='mid',\
    width=0.0018,scale=300,transform=ccrs.PlateCarree(),color='k',angles='xy',zorder=1)
    cp=ax.contourf(lon,lat,w.data[i],zorder=0,transform=ccrs.PlateCarree(),cmap=cmap,levels=np.arange(0,21,2),extend='both')
plt.show()


                    一个努力学习python的海洋人
                    水平有限,欢迎指正!!!
                    欢迎评论、收藏、点赞、转发、关注。
                    关注我不后悔,记录学习进步的过程~~
相关文章
|
1月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
124 10
|
14天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
1月前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
2月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
64 3
|
2月前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
38 1
|
2月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
2月前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
2月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
105 0
|
2月前
|
数据采集 存储 分布式计算
超酷炫Python技术:交通数据的多维度分析
超酷炫Python技术:交通数据的多维度分析
|
2月前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
39 0
下一篇
开通oss服务