You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:45:42