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

ERA5全球GRIB风场数据绘图及多米尼克区域提取技术问题

解决ERA5 GRIB数据内核崩溃+多米尼克岛风场绘图问题

内核重启的根本原因

你手里的全球逐小时ERA5 GRIB数据包含912个变量,直接加载全量数据会瞬间耗尽Jupyter内核的内存,导致内核强制重启,自然无法输出图像。核心解决逻辑是先裁剪出多米尼克岛的目标区域,再处理数据,绝对不能碰全量全球数据。

修正后的可运行代码

使用xarray配合cfgrib加载数据时直接完成区域裁剪,从根源避免内存爆炸:

import xarray as xr
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature

# 多米尼克岛边界框:[南, 北, 西, 东]
dominica_bbox = [14.78, 15.88, -62.21, -60.68]

# 加载数据时直接裁剪区域+筛选层级,规避全量数据
# 提前安装依赖:pip install cfgrib xarray cartopy
ds = xr.open_dataset(
    "你的2017年9月ERA5风场数据.grib",
    engine="cfgrib",
    backend_kwargs={
        "filter_by_keys": {"typeOfLevel": "surface"},  # 仅加载近地面层,减少冗余变量
        "indexpath": ""  # 避免生成临时索引文件
    }
).sel(
    latitude=slice(dominica_bbox[1], dominica_bbox[0]),  # ERA5纬度按北→南排序,切片需反序
    longitude=slice(dominica_bbox[2], dominica_bbox[3])
)

# 提取10米风场(若变量名不是u10/v10,运行print(ds.data_vars)查看实际名称)
u10 = ds["u10"]
v10 = ds["v10"]

# 选择某一小时的数据绘图(示例:2017年9月1日0点)
plot_time = "2017-09-01T00:00:00"
u_plot = u10.sel(time=plot_time)
v_plot = v10.sel(time=plot_time)

# 绘图设置
fig, ax = plt.subplots(figsize=(10,8), subplot_kw={"projection": ccrs.PlateCarree()})
ax.set_extent(dominica_bbox, crs=ccrs.PlateCarree())

# 添加地图基础元素
ax.add_feature(cfeature.COASTLINE, linewidth=1)
ax.add_feature(cfeature.LAND, color="#f0f0f0")
ax.add_feature(cfeature.BORDERS, linestyle=":")

# 绘制风场箭头
q = ax.quiver(
    u_plot.longitude, u_plot.latitude,
    u_plot.values, v_plot.values,
    scale=120, color="#2c3e50"
)

# 添加风场图例
plt.quiverkey(q, 0.92, 0.95, 10, "10 m/s", labelpos="E")

# 设置标题
plt.title(f"多米尼克岛近地面风场 - {plot_time}")

# JupyterLab中强制触发图像显示
plt.show()

关键优化细节

  1. 先裁剪再加载:通过sel()在数据加载阶段就切出目标区域,完全规避全量全球数据的内存占用,从根源解决内核重启问题。
  2. 筛选冗余变量:用filter_by_keys仅加载需要的层级(比如近地面),不用处理912个变量中的冗余数据。
  3. 单时间步绘图:逐小时数据包含744个时间节点,仅选择单个时间点绘图,进一步降低内存压力。

踩坑提示

  • 若风场变量名不是u10/v10,运行print(ds.data_vars)查看所有变量,替换为实际的风场变量名称。
  • 若仍出现内存不足,可按天加载数据(比如sel(time=slice("2017-09-01", "2017-09-01")))后再裁剪区域。
  • 必须安装cfgrib库,否则xarray无法读取GRIB格式文件。

内容的提问来源于stack exchange,提问作者Swagatalaxmi Das

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:05:06