基于NetCDF文件绘制12次逐月平均风羽与风速填色图求助
Python绘制逐月风羽+风速填色图(NetCDF数据)
前置依赖
先安装所需库:
pip install numpy matplotlib xarray netCDF4
完整代码
import numpy as np import matplotlib.pyplot as plt import xarray as xr # 加载NetCDF数据 u_ds = xr.open_dataset('uwnd.10m.mon.ltm.nc') v_ds = xr.open_dataset('vwnd.10m.mon.ltm.nc') # 提取风场数据(假设变量名是uwnd和vwnd,若不符请替换为实际变量名) u = u_ds['uwnd'].values v = v_ds['vwnd'].values lat = u_ds['lat'].values lon = u_ds['lon'].values months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] # 计算风速 wind_speed = np.sqrt(u**2 + v**2) # 设置绘图布局:3行4列子图 fig, axes = plt.subplots(nrows=3, ncols=4, figsize=(16, 12)) axes = axes.flatten() # 把二维数组转为一维,方便循环 # 循环绘制每个月的图 for i in range(12): ax = axes[i] # 绘制风速填色等值线图 cf = ax.contourf(lon, lat, wind_speed[i], levels=np.arange(0, 25, 2), cmap='viridis', extend='max') # 绘制风羽图,skip参数控制风羽密度(避免太密集) ax.barb(lon[::2], lat[::2], u[i][::2, ::2], v[i][::2, ::2], color='white', length=6) # 设置子图标题和坐标轴 ax.set_title(months[i], fontsize=12) ax.set_xlabel('经度', fontsize=10) ax.set_ylabel('纬度', fontsize=10) ax.grid(alpha=0.3) # 统一设置颜色条 fig.colorbar(cf, ax=axes, orientation='horizontal', pad=0.05, label='风速 (m/s)') # 调整子图间距 plt.tight_layout() plt.savefig('逐月风场图.png', dpi=300) plt.show()
关键说明
- 数据变量名:如果你的NetCDF文件中风场变量名不是
uwnd/vwnd,打开文件后可以用print(u_ds)查看变量名,替换代码里的对应部分。 - 风羽密度:代码中
lon[::2], lat[::2]是每隔2个点取一个风羽,若风羽还是太密,可改成::3;若太稀疏,改成::1。 - 风速等级:
levels=np.arange(0,25,2)是设置风速从0到25m/s,间隔2m/s,可根据你的数据范围调整。 - 颜色映射:
cmap='viridis'是默认的配色,也可以换成'coolwarm'、'jet'等其他matplotlib配色。
内容的提问来源于stack exchange,提问作者Snigdha
相关产品推荐
相关产品推荐

