上次写的教程疏忽大意了,示例文件整成nc文件了
xarray 系列 | 怎么使用ERA5再分析数据绘制气象要素廓线
虽然上次的代码一样能读取,但是读取出来的·变量名还是有差异的,
为了不误导读者,上次的教程就当是nc版本的
这次是grib版本
由于可视化代码过长隐藏,可点击运行Fork查看 🔜🔜若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
xarray允许您指定不同的引擎来处理不同格式的数据。对于GRIB文件,可以使用pynio引擎直接读取
In [1]:
import xarray as xr
file_path = '/home/mw/input/era58362/ERA5-2022-09_04-pl.grib'
engine = 'pynio'
dataset = xr.open_dataset(file_path, engine=engine)
dataset
Out[1]:
变量名相信大家能认出来,还有就是高度经度纬度的差别
注意变量名稍有不同
In [2]:
u_wind = dataset['U_GDS0_ISBL'][0]
v_wind = dataset['V_GDS0_ISBL'][0]
u500=u_wind.sel(lv_ISBL1=500)
v500=v_wind.sel(lv_ISBL1=500)
u500
确定您感兴趣的经纬度坐标(例如,target_lat =40,target_lon = 120)。使用xarray的sel方法找到最接近该点的格点数据
In [9]:
target_lat, target_lon = 40, 120
nearest_point = dataset.sel(g0_lon_3=target_lon, g0_lat_2=target_lat, method='nearest')
nearest_point
Out[9]:
计算风速并绘制垂直廓线(风速随高度的变化分布)
import matplotlib.pyplot as plt
import numpy as np
wind_speed = np.sqrt(nearest_point['U_GDS0_ISBL'] ** 2 + nearest_point['V_GDS0_ISBL'] ** 2)
fig, ax = plt.subplots(figsize=(10, 12))
# 绘制风速廓线
ax.plot(wind_speed[0].values, nearest_point['lv_ISBL1'].values, 'b', linewidth=2) # 使用蓝色线条绘制风速曲线
# 设置轴标签
plt.xlabel('Wind Speed (m/s)')
plt.ylabel('Pressure Level (hPa)')
plt.title(f'Wind Speed Profile at ({target_lat:.2f}, {target_lon:.2f})')
# 反转 y 轴(从大气顶部向下到地面)
ax.invert_yaxis()
# 添加网格线
ax.grid(True)
# 显示图形
plt.show()