python绘制全球ERA5再分析数据10m风速产品
python绘制全球ERA5再分析数据10m风速产品
水平风速的计算
# 计算风速
wind_speed = np.sqrt(u**2 + v**2)
# u和v分别是经向风和维向风矢量
需要提供的数据是10米的U和V数据,
可以在官网下载的时候下载到同一个nc/grib文件。
数据样例
数据本身具备格点数据性质即可,目前采用的ERA5数据,
但是包括EC、GFS、MESO、WSP等多种数值模式预报、
或者实况格网、智能预报产品都可以绘制风速和风向,
根据实际情况采取对应的策略。
数据使用如下
绘制代码
ds = xr.open_dataset(filePath, engine='cfgrib')
def draw_wd10m(ds, element, base_out_path):time = ds['time'].valueslon = ds['longitude'].valueslat = ds['latitude'].valuesdata_u = ds['u10']data_v = ds['v10']# 获取颜色和等级配置colors = color_ERA5[element]['colors']levels = color_ERA5[element]['levels']# 加载全球国界线的 Shapefile 数据world_borders = gpd.read_file(r'world\World_countries.shp')# 遍历每个时间步for idx, t in enumerate(time):# 提取当前时刻的数据切片datau = data_u.isel(time=idx).values # 使用索引选择,或 data.sel(time=t) 根据实际时间值选择datav = data_v.isel(time=idx).valueswindspeed = np.sqrt(datau**2 + datav**2)output_dir, time_str = create_path(t, base_out_path, element)cmap = ListedColormap(colors)# cmap.set_under('none') norm = BoundaryNorm(levels, cmap.N)lon_grid, lat_grid = np.meshgrid(lon, lat)# 创建图形plt.figure(figsize=(16, 8), facecolor='none')# 绘制数据plt.contourf(lon_grid, lat_grid, windspeed, levels=levels, cmap=cmap, norm=norm, extend='both')# 叠加全球国界线world_borders.plot(ax=plt.gca(), facecolor='none', edgecolor='black', linewidth=0.5)# 设置地图范围plt.xlim([np.min(lon), np.max(lon)])plt.ylim([np.min(lat), np.max(lat)])plt.axis('off')# 保存图像output_path = os.path.join(output_dir, f"{time_str}.png")plt.savefig(output_path, dpi=600, bbox_inches='tight', pad_inches=0, transparent=True)plt.close()
10米风速产品绘制样例【单位m/s】
备注:叠加到地球范围经度【-180~180】维度范围【-90 ~ 90】