本文以“气压层(等压面)插值”为主题,整理常用的 Python 库与典型调用方式,适合做大气模式数据的层间插值、诊断与可视化前处理。 若你在使用这些库时遇到问题,欢迎留言交流。
不经意间又是一年,在这里祝大家马年大吉,新春快乐。之前在气象家园看到有朋友在对比cdo与geocat库的插值气压层效果(https://bbs.06climate.com/forum.php?mod=viewthread&tid=111661),于是萌生总结一下我所知道的插值气压层的方法,以便读者学习。
气压层插值是大气数值模式后处理中的高频步骤:
本文以“可落地、易上手”为目标,整理几类常见 Python 工具包,并给出它们在气压层插值上的适用场景与入口函数。
本文对以下库进行梳理:
并补充转载来源说明,便于规范引用与传播。
GeoCAT-comp 提供与 NCL vinth2p 类似的接口,适合处理 CAM/ERA 等混合 σ 层数据。
核心函数:
geocat.comp.interpolation.interp_hybrid_to_pressure
特点:
适用场景:
代码示例:
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
MetPy 提供 log_interpolate_1d,适合在已计算出 pressure 的情况下进行插值。
核心函数:
metpy.interpolate.log_interpolate_1d(示例中常用 mpcalc.log_interp)
特点:
适用场景:
代码示例:
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
)
示例图(官方文档):

来源:https://unidata.github.io/MetPy/latest/examples/sigma_to_pressure_interpolation.html
wrf-python 在 WRF 后处理中非常常见,interplevel 可以将三维变量插到指定压力面。
核心函数:
wrf.interplevel
特点:
适用场景:
代码示例:
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
xgcm 的 Grid.transform 允许在任意轴上做坐标变换,method='log' 用于等压面插值。
核心函数:
xgcm.Grid.transform
特点:
适用场景:
代码示例:
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
Skyborn 以 xarray 为核心,提供混合 σ 层到等压面的插值封装。
核心函数:
skyborn.interp.interp_hybrid_to_pressure
特点:
适用场景:
代码示例:
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
easyclimate 对 SciPy 插值进行了简单封装,适合快速把模型层转换为标准气压层。
核心函数:
easyclimate.interp.modellevel2pressure.interp1d_vertical_model2pressure
特点:
适用场景:
代码示例:
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 | 插值类型可控 | 业务工程处理 |