基于气象数据ERA5的Python绘制风场

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'202289.nc'
data=xr.open_dataset(p).sel(time=slice("2022","2022"))
# 地面风场属性字段是u/v10 高空气压风场改成u/v
u=data.u10
v=data.v10

w=np.sqrt(u*u+v*v)
lon=data.longitude.data
lat=data.latitude.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], 2),crs=ccrs.PlateCarree())
    ax.set_yticks(np.arange(box[2], box[3], 2),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=(25,35))
x,y=np.meshgrid(lon,lat)
box1 = [105, 125, 30, 45]  
scale = '50m'            
xstep, ystep = 10, 10
cmap=plt.get_cmap('Spectral_r')#'RdYlBu_r' 配色网上有很多参考 可以搜cmap配色
# 可以改成任意需要的月份
titl=['Aug','Sept']

# =============================================================================
# print(x[::5,::5].shape)
# print(u.data)
# print(v.data)
# print(w.data[0].shape)
# =============================================================================
#几个月份循环内的数字就改成几
for i in range(2):
    print(f"i{i}")
    proj=ccrs.PlateCarree(central_longitude=115)
    ax=fig.add_subplot(4,2,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=150,transform=ccrs.PlateCarree(),color='k',angles='xy',zorder=1)
    # cp=ax.contour(lon,lat,w.data[i],zorder=0,transform=ccrs.PlateCarree(),cmap=cmap,levels=np.arange(0,31,1),extend='both')
    cp=ax.contourf(lon,lat,w.data[i],zorder=0,transform=ccrs.PlateCarree(),cmap=cmap,levels=np.arange(0,31,1),extend='both')
    cbar = fig.colorbar(cp,pad=0.01,label='The wind speed (m/s)')
plt.show()

!特别需要注意的是,我用ArcGIS读了nc数据之后,发现2022年6-9月,存储的格式不一样了,所以可能只能一个月一个月下载数据来绘制(我菜我不会写)

nc数据下载网址:Copernicus Climate Data Store |

 我这链接是高空气压的,可以按需自己搜其他数据集来改。

!!有报错就是你catopy库没装好,建议anaconda官方提供的方式下载。

 

 

感谢一些大佬:python--循环绘制ERA5风场的空间分布图_oceanography-Rookie的博客-CSDN博客_python 空间分布图

python 如何绘制全球风场(以2020年月均数据为例)_oceanography-Rookie的博客-CSDN博客_python 风场

  • 1
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值