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的海洋人
                    水平有限,欢迎指正!!!
                    欢迎评论、收藏、点赞、转发、关注。
                    关注我不后悔,记录学习进步的过程~~
相关文章
|
2天前
|
机器学习/深度学习 存储 数据采集
【Python 机器学习专栏】PCA(主成分分析)在数据降维中的应用
【4月更文挑战第30天】本文探讨了主成分分析(PCA)在高维数据降维中的应用。PCA通过线性变换找到最大化方差的主成分,从而降低数据维度,简化存储和计算,同时去除噪声。文章介绍了PCA的基本原理、步骤,强调了PCA在数据降维、可视化和特征提取上的优势,并提供了Python实现示例。PCA广泛应用在图像压缩、机器学习和数据分析等领域,但降维后可能损失解释性,需注意选择合适主成分数量及数据预处理。
|
2天前
|
vr&ar Python
Python自激励阈值自回归(SETAR)、ARMA、BDS检验、预测分析太阳黑子时间序列数据
Python自激励阈值自回归(SETAR)、ARMA、BDS检验、预测分析太阳黑子时间序列数据
|
2天前
|
Python
Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享
Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享
|
2天前
|
机器学习/深度学习 Python
【Python机器学习专栏】时间序列数据的特征工程
【4月更文挑战第30天】本文探讨了时间序列数据的特征工程,强调其在捕捉季节性、揭示趋势、处理异常值和提升模型性能中的重要性。介绍了滞后特征、移动窗口统计特征、时间戳特征、频域特征和波动率特征等方法,并提供了Python实现示例。通过有效特征工程,可提高时间序列分析的准确性和预测可靠性。
|
2天前
|
机器学习/深度学习 计算机视觉 Python
【Python 机器学习专栏】图像数据的特征提取与预处理
【4月更文挑战第30天】本文探讨了图像数据的特征提取与预处理在机器学习中的重要性。图像数据具有大容量、信息丰富和冗余性高的特点。特征提取涉及颜色、纹理和形状特征;预处理包括图像增强、去噪和分割。Python的OpenCV和Scikit-image库在处理这些任务时非常有用。常见的特征提取方法有统计、变换和基于模型的方法,而预处理应注意保持图像真实性、适应性调整及验证评估。有效的特征提取和预处理能提升模型性能,Python工具使其更高效。
|
2天前
|
机器学习/深度学习 自然语言处理 算法
【Python机器学习专栏】文本数据的特征提取与表示
【4月更文挑战第30天】本文探讨了文本特征提取与表示在机器学习和NLP中的重要性。介绍了词袋模型、TF-IDF和n-gram等特征提取方法,以及稀疏向量和词嵌入等表示方式。Python中可利用sklearn和gensim库实现这些技术。有效的特征提取与表示有助于将文本数据转化为可处理的数值形式,推动NLP和机器学习领域的进步。
|
2天前
|
机器学习/深度学习 数据采集 算法
【Python机器学习专栏】使用Scikit-learn进行数据编码
【4月更文挑战第30天】本文介绍了Python Scikit-learn库在机器学习数据预处理中的作用,尤其是数据编码。数据编码将原始数据转化为算法可理解的格式,包括标签编码(适用于有序分类变量)、独热编码(适用于无序分类变量)和文本编码(如词袋模型、TF-IDF)。Scikit-learn提供LabelEncoder和OneHotEncoder类实现这些编码。示例展示了如何对数据进行标签编码和独热编码,强调了正确选择编码方法的重要性。
|
2天前
|
机器学习/深度学习 数据采集 算法
【Python机器学习专栏】数据标准化与归一化技术
【4月更文挑战第30天】在机器学习中,数据预处理的两大关键步骤是标准化和归一化,旨在调整数据范围以优化算法性能。标准化将数据缩放到特定区间,如[-1, 1]或[0, 1],适合基于距离的算法,如KNN、SVM。归一化则将数据线性变换到[0, 1],保持相对关系。Python中可使用`sklearn.preprocessing`的`MinMaxScaler`和`StandardScaler`实现这两种操作。选择哪种方法取决于数据分布和算法需求。预处理能提升模型理解和性能,增强预测准确性和可靠性。
|
2天前
|
自然语言处理 数据可视化 数据挖掘
数据代码分享|Python对全球Covid-19疫情失业数据相关性、可视化分析
数据代码分享|Python对全球Covid-19疫情失业数据相关性、可视化分析
|
2天前
|
机器学习/深度学习 数据采集 数据可视化
【Python 机器学习专栏】数据缺失值处理与插补方法
【4月更文挑战第30天】本文探讨了Python中处理数据缺失值的方法。缺失值影响数据分析和模型训练,可能导致模型偏差、准确性降低和干扰分析。检测缺失值可使用Pandas的`isnull()`和`notnull()`,或通过可视化。处理方法包括删除含缺失值的行/列及填充:固定值、均值/中位数、众数或最近邻。Scikit-learn提供了SimpleImputer和IterativeImputer类进行插补。选择方法要考虑数据特点、缺失值比例和模型需求。注意过度插补和验证评估。处理缺失值是提升数据质量和模型准确性关键步骤。