首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >马年大吉 | 代码实战 | 气压层插值常用库综述(含 xgcm / MetPy / GeoCAT / wrf-python / easyclimate)

马年大吉 | 代码实战 | 气压层插值常用库综述(含 xgcm / MetPy / GeoCAT / wrf-python / easyclimate)

作者头像
用户11172986
发布2026-04-24 19:26:55
发布2026-04-24 19:26:55
480
举报
文章被收录于专栏:气python风雨气python风雨

马年大吉 | 代码实战 | 气压层插值常用库综述(含 xgcm / MetPy / GeoCAT / wrf-python / easyclimate)

温馨提示

本文以“气压层(等压面)插值”为主题,整理常用的 Python 库与典型调用方式,适合做大气模式数据的层间插值、诊断与可视化前处理。 若你在使用这些库时遇到问题,欢迎留言交流。

前言

不经意间又是一年,在这里祝大家马年大吉,新春快乐。之前在气象家园看到有朋友在对比cdo与geocat库的插值气压层效果(https://bbs.06climate.com/forum.php?mod=viewthread&tid=111661),于是萌生总结一下我所知道的插值气压层的方法,以便读者学习。

气压层插值是大气数值模式后处理中的高频步骤:

  • 模式输出通常是地形跟随的混合 σ 层或模型层;
  • 诊断分析与可视化却常常要求固定的等压面(如 500 hPa、850 hPa);
  • 将模式层数据统一到标准压力层,是后续诊断与绘图的关键。

本文以“可落地、易上手”为目标,整理几类常见 Python 工具包,并给出它们在气压层插值上的适用场景与入口函数。

项目目标

  • 了解 Python 生态中可用于气压层插值的主流库
  • 快速判断每个库的优劣和适用场景
  • 便于后续写脚本时快速定位可用函数

项目方法

本文对以下库进行梳理:

  • GeoCAT-comp
  • MetPy
  • wrf-python
  • xgcm
  • Skyborn
  • easyclimate

并补充转载来源说明,便于规范引用与传播。

1. GeoCAT-comp:混合 σ 层 → 等压面(强烈推荐)

GeoCAT-comp 提供与 NCL vinth2p 类似的接口,适合处理 CAM/ERA 等混合 σ 层数据。

核心函数: geocat.comp.interpolation.interp_hybrid_to_pressure

特点:

  • 支持线性/对数插值
  • 可选地面以下外推
  • 默认输出 21 个标准气压层

适用场景:

  • 使用 xarray 数据,且数据是混合 σ 层或模型层
  • 需要与 NCL/ECMWF 插值结果保持一致的科研项目

代码示例:

代码语言:javascript
复制
import geocat.comp as gc

plev = [100000, 85000, 70000, 50000]  # Pa
out = gc.interpolation.interp_hybrid_to_pressure(
    data=var, ps=ps, hyam=hyam, hybm=hybm,
    new_levels=plev, method="log"
)

来源:https://geocat-comp.readthedocs.io/en/latest/user_api/generated/geocat.comp.interpolation.interp_hybrid_to_pressure.html

2. MetPy:σ 层 → 等压面(轻量、易用)

MetPy 提供 log_interpolate_1d,适合在已计算出 pressure 的情况下进行插值。

核心函数: metpy.interpolate.log_interpolate_1d(示例中常用 mpcalc.log_interp

特点:

  • 使用对数插值,适合气压坐标
  • 可同时插多个变量

适用场景:

  • 你已经有 pressure 三维场
  • 只需要插值到少量等压面层

代码示例:

代码语言:javascript
复制
from metpy.interpolate import log_interpolate_1d
from metpy.units import units

plev = [700] * units.hPa
height_700, temp_700 = log_interpolate_1d(
    plev, pressure, height, temperature, axis=1
)

示例图(官方文档):

MetPy Sigma → Pressure 示例图
MetPy Sigma → Pressure 示例图

来源:https://unidata.github.io/MetPy/latest/examples/sigma_to_pressure_interpolation.html

3. wrf-python:WRF 数据插值到指定气压层

wrf-python 在 WRF 后处理中非常常见,interplevel 可以将三维变量插到指定压力面。

核心函数: wrf.interplevel

特点:

  • 直接对 3D 变量插值
  • 结果可返回 xarray.DataArray

适用场景:

  • 典型 WRF 后处理
  • 需要快速获取 500 hPa / 850 hPa 等层的数据

代码示例:

代码语言:javascript
复制
from netCDF4 import Dataset
from wrf import getvar, interplevel

wrfin = Dataset("wrfout_d02_2010-06-13_21:00:00")
pressure = getvar(wrfin, "pressure")
height = getvar(wrfin, "z", units="dm")
height_500 = interplevel(height, pressure, 500.0)

来源:https://wrf-python.readthedocs.io/en/latest/user_api/generated/wrf.interplevel.html

4. xgcm:网格变换式垂直坐标插值(灵活但需理解网格)

xgcm 的 Grid.transform 允许在任意轴上做坐标变换,method='log' 用于等压面插值。

核心函数: xgcm.Grid.transform

特点:

  • 更通用的坐标变换框架
  • 可以从 σ/模式层插到等压面

适用场景:

  • 已基于 xarray + xgcm 构建网格
  • 需要统一处理多个坐标维度

代码示例:

代码语言:javascript
复制
from xgcm import Grid
import numpy as np

# grid 已由 xarray Dataset 构建
plev = np.array([1.0e5, 8.5e4, 7.0e4])
var_p = grid.transform(
    ds.temperature, "Z", plev,
    target_data=ds.pressure, method="log"
)

来源:https://xgcm.readthedocs.io/en/latest/transform.html

5. Skyborn:xarray 友好的混合 σ 层插值封装

Skyborn 以 xarray 为核心,提供混合 σ 层到等压面的插值封装。

核心函数: skyborn.interp.interp_hybrid_to_pressure

特点:

  • 保留元数据
  • 支持外推和多种插值方法

适用场景:

  • 想要轻量但功能完整的插值封装

代码示例:

代码语言:javascript
复制
import skyborn.interp as si
import numpy as np

plev = np.array([100000, 85000, 70000])
var_p = si.interp_hybrid_to_pressure(
    data=var, ps=ps, hyam=hyam, hybm=hybm,
    new_levels=plev, method="linear"
)

来源:https://skyborn.readthedocs.io/en/latest/_modules/skyborn/interp/interpolation.html

6. easyclimate:模型层 → 标准气压层的通用插值

easyclimate 对 SciPy 插值进行了简单封装,适合快速把模型层转换为标准气压层。

核心函数: easyclimate.interp.modellevel2pressure.interp1d_vertical_model2pressure

特点:

  • 插值方式可选(linear、cubic 等)
  • 对 pressure_data 维度要求明确

适用场景:

  • 想要显式控制插值方式
  • 更偏工程/业务处理

代码示例:

代码语言:javascript
复制
from easyclimate.interp.modellevel2pressure import interp1d_vertical_model2pressure

plev = [5000, 10000, 20000, 30000, 50000, 85000, 100000]
var_p = interp1d_vertical_model2pressure(
    pressure_data=pressure,
    variable_data=temperature,
    vertical_input_dim="lev",
    vertical_output_dim="plev",
    vertical_output_level=plev,
    kind="linear"
)

来源:https://easyclimate.readthedocs.io/en/latest/technical/api/easyclimate/interp/modellevel2pressure/index.html

快速对比(便于选型)

典型输入

优势

适合场景

GeoCAT-comp

混合 σ 层 + ps

与 NCL 一致、功能完整

CAM/ERA/科研对照

MetPy

pressure 3D

轻量、接口直观

小规模插值

wrf-python

WRF 输出

直接对接 WRF

WRF 后处理

xgcm

xgcm 网格

通用坐标变换

复杂坐标体系

Skyborn

xarray + σ 层

简洁封装

快速脚本

easyclimate

pressure 3D

插值类型可控

业务工程处理

小结:如何选择合适的库?

  • CAM/ERA 等混合 σ 层数据:优先 GeoCAT-comp
  • WRF 后处理:wrf-python 最直接
  • 自定义压力场 / 轻量脚本:MetPy 足够
  • 复杂多轴坐标变换:xgcm 更适合
  • 偏工具封装:Skyborn / easyclimate 可快速上手

参考

  1. https://geocat-comp.readthedocs.io/en/latest/user_api/generated/geocat.comp.interpolation.interp_hybrid_to_pressure.html
  2. https://unidata.github.io/MetPy/latest/examples/sigma_to_pressure_interpolation.html
  3. https://wrf-python.readthedocs.io/en/latest/user_api/generated/wrf.interplevel.html
  4. https://xgcm.readthedocs.io/en/latest/transform.html
  5. https://skyborn.readthedocs.io/en/latest/_modules/skyborn/interp/interpolation.html
  6. https://easyclimate.readthedocs.io/en/latest/technical/api/easyclimate/interp/modellevel2pressure/index.html
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 马年大吉 | 代码实战 | 气压层插值常用库综述(含 xgcm / MetPy / GeoCAT / wrf-python / easyclimate)
    • 温馨提示
    • 前言
    • 项目目标
    • 项目方法
    • 1. GeoCAT-comp:混合 σ 层 → 等压面(强烈推荐)
    • 2. MetPy:σ 层 → 等压面(轻量、易用)
    • 3. wrf-python:WRF 数据插值到指定气压层
    • 4. xgcm:网格变换式垂直坐标插值(灵活但需理解网格)
    • 5. Skyborn:xarray 友好的混合 σ 层插值封装
    • 6. easyclimate:模型层 → 标准气压层的通用插值
    • 快速对比(便于选型)
    • 小结:如何选择合适的库?
    • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档