使用xarray处理NDFD GRIB2数据时出现镜像问题该如何修复
问题原因
- 首先存在两处代码笔误:请求返回对象命名为
resp,写文件时调用了未定义的resp1会触发NameError;缺少matplotlib导入,绘图代码无法运行。 - 核心的隔行东西向镜像问题,来自该GRIB2文件的网格扫描配置:文件头的扫描模式标识(scanMode)设置了相邻行反向扫描,旧版本
cfgrib读取时未自动识别该配置,导致每隔一行的经度方向数据被倒序读取。
修复方案
方案1:手动校正数据(兼容所有cfgrib版本)
直接对读取到的风场数据做隔行翻转处理,修复代码如下:
import pandas as pd import numpy as np import requests import cfgrib import xarray as xr import matplotlib.pyplot as plt # 下载GRIB2文件,修正变量名笔误 resp = requests.get('https://tgftp.nws.noaa.gov/SL.us008001/ST.opnl/DF.gr2/DC.ndfd/AR.neast/VP.001-003/ds.wspd.bin', stream=True) with open('..\\001_003wspd.grib2', 'wb') as f: f.write(resp.content) # 读取GRIB2文件 xr_set = xr.load_dataset('..\\001_003wspd.grib2', engine='cfgrib') # 修复隔行镜像:翻转所有奇数索引行的经度维度 fixed_si10 = xr_set.si10.copy() fixed_si10[:, 1::2, :] = fixed_si10[:, 1::2, :, ::-1] # 绘图 fixed_si10[0].plot(cmap=plt.cm.coolwarm) plt.show()
方案2:升级依赖自动处理
将cfgrib升级到0.9.10及以上版本,新版已经内置了对反向扫描标识的自动识别逻辑,读取时无需额外手动处理即可得到正确的网格数据。
升级命令:
pip install --upgrade cfgrib
内容的提问来源于stack exchange,提问作者nfick
相关产品推荐
相关产品推荐

