本教程演示如何:
potential_intensity 函数计算热带气旋潜在强度。函数说明
from skyborn.calc import potential_intensity
pmin, vmax, flag = potential_intensity( sst, # 海表温度,K(标量或 2D 网格) psl, # 海平面气压,Pa(标量或 2D 网格) pressure_levels, # 等压面数组,单位 mb(hPa) temperature, # 温度,K,形状 (level, lat, lon) 或 (level,) mixing_ratio # 水汽混合比,kg/kg,与 temperature 同形状 )
!pip install skyborn -i https://pypi.mirrors.ustc.edu.cn/simple/
Looking in indexes: https://pypi.mirrors.ustc.edu.cn/simple/
Collecting skyborn
Downloading https://mirrors.ustc.edu.cn/pypi/packages/0b/9e/653b69973e8593c7f21bdd18bacca1b7796702c205711b843c1381b69ad6/skyborn-0.4.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.7 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 984.1 kB/s eta 0:00:000:00:01
[?25hRequirement already satisfied: numpy in /opt/conda/lib/python3.11/site-packages (from skyborn) (1.26.4)
Requirement already satisfied: pandas in /opt/conda/lib/python3.11/site-packages (from skyborn) (2.2.3)
Requirement already satisfied: xarray in /opt/conda/lib/python3.11/site-packages (from skyborn) (2024.3.0)
Requirement already satisfied: matplotlib in /opt/conda/lib/python3.11/site-packages (from skyborn) (3.9.1)
Requirement already satisfied: netCDF4 in /opt/conda/lib/python3.11/site-packages (from skyborn) (1.6.3)
Requirement already satisfied: metpy in /opt/conda/lib/python3.11/site-packages (from skyborn) (1.6.3)
Requirement already satisfied: tqdm in /opt/conda/lib/python3.11/site-packages (from skyborn) (4.67.0)
Requirement already satisfied: statsmodels in /opt/conda/lib/python3.11/site-packages (from skyborn) (0.14.4)
Requirement already satisfied: scipy in /opt/conda/lib/python3.11/site-packages (from skyborn) (1.14.1)
Requirement already satisfied: scikit-learn in /opt/conda/lib/python3.11/site-packages (from skyborn) (1.6.0)
Requirement already satisfied: dask in /opt/conda/lib/python3.11/site-packages (from skyborn) (2024.8.1)
Requirement already satisfied: click>=8.1 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (8.1.7)
Requirement already satisfied: cloudpickle>=3.0.0 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (3.1.0)
Requirement already satisfied: fsspec>=2021.09.0 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (2025.2.0)
Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (24.1)
Requirement already satisfied: partd>=1.4.0 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (1.4.2)
Requirement already satisfied: pyyaml>=5.3.1 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (6.0.2)
Requirement already satisfied: toolz>=0.10.0 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (1.0.0)
Requirement already satisfied: importlib-metadata>=4.13.0 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (8.5.0)
Requirement already satisfied: contourpy>=1.0.1 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (1.3.1)
Requirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (4.55.3)
Requirement already satisfied: kiwisolver>=1.3.1 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (1.4.7)
Requirement already satisfied: pillow>=8 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (9.4.0)
Requirement already satisfied: pyparsing>=2.3.1 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (3.2.0)
Requirement already satisfied: python-dateutil>=2.7 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (2.9.0.post0)
Requirement already satisfied: pint>=0.17 in /opt/conda/lib/python3.11/site-packages (from metpy->skyborn) (0.24.4)
Requirement already satisfied: pooch>=1.2.0 in /opt/conda/lib/python3.11/site-packages (from metpy->skyborn) (1.8.2)
Requirement already satisfied: pyproj>=3.0.0 in /opt/conda/lib/python3.11/site-packages (from metpy->skyborn) (3.5.0)
Requirement already satisfied: traitlets>=5.0.5 in /opt/conda/lib/python3.11/site-packages (from metpy->skyborn) (5.14.3)
Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.11/site-packages (from pandas->skyborn) (2024.1)
Requirement already satisfied: tzdata>=2022.7 in /opt/conda/lib/python3.11/site-packages (from pandas->skyborn) (2024.2)
Requirement already satisfied: cftime in /opt/conda/lib/python3.11/site-packages (from netCDF4->skyborn) (1.6.4)
Requirement already satisfied: joblib>=1.2.0 in /opt/conda/lib/python3.11/site-packages (from scikit-learn->skyborn) (1.4.2)
Requirement already satisfied: threadpoolctl>=3.1.0 in /opt/conda/lib/python3.11/site-packages (from scikit-learn->skyborn) (3.5.0)
Requirement already satisfied: patsy>=0.5.6 in /opt/conda/lib/python3.11/site-packages (from statsmodels->skyborn) (1.0.1)
Requirement already satisfied: zipp>=3.20 in /opt/conda/lib/python3.11/site-packages (from importlib-metadata>=4.13.0->dask->skyborn) (3.21.0)
Requirement already satisfied: locket in /opt/conda/lib/python3.11/site-packages (from partd>=1.4.0->dask->skyborn) (1.0.0)
Requirement already satisfied: platformdirs>=2.1.0 in /opt/conda/lib/python3.11/site-packages (from pint>=0.17->metpy->skyborn) (4.3.6)
Requirement already satisfied: typing_extensions>=4.0.0 in /opt/conda/lib/python3.11/site-packages (from pint>=0.17->metpy->skyborn) (4.12.2)
Requirement already satisfied: flexcache>=0.3 in /opt/conda/lib/python3.11/site-packages (from pint>=0.17->metpy->skyborn) (0.3)
Requirement already satisfied: flexparser>=0.4 in /opt/conda/lib/python3.11/site-packages (from pint>=0.17->metpy->skyborn) (0.4)
Requirement already satisfied: requests>=2.19.0 in /opt/conda/lib/python3.11/site-packages (from pooch>=1.2.0->metpy->skyborn) (2.32.3)
Requirement already satisfied: certifi in /opt/conda/lib/python3.11/site-packages (from pyproj>=3.0.0->metpy->skyborn) (2024.12.14)
Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->skyborn) (1.17.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.11/site-packages (from requests>=2.19.0->pooch>=1.2.0->metpy->skyborn) (3.4.0)
Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.11/site-packages (from requests>=2.19.0->pooch>=1.2.0->metpy->skyborn) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.11/site-packages (from requests>=2.19.0->pooch>=1.2.0->metpy->skyborn) (2.2.3)
Installing collected packages: skyborn
Successfully installed skyborn-0.4.1
import os
import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from netCDF4 import Dataset
from wrf import getvar, interplevel, to_np
from skyborn.calc import potential_intensity
wrf_file = "/home/mw/input/typhoon9537/wrfout_d01_2019-08-08_21_00_00"
if not os.path.exists(wrf_file):
raise FileNotFoundError(f"未找到文件:{wrf_file}")
nc = Dataset(wrf_file)
print("WRF 文件已打开")
WRF 文件已打开
计算 PI 需要以下输入:
变量 | WRF 变量 | 单位 | 说明 |
|---|---|---|---|
SST | SST | K | 海表温度 |
海平面气压 | PSFC 或 slp | Pa | 函数要求 Pa;若用 slp 需转换为 Pa |
温度廓线 | tk | K | 插值到等压面 |
比湿廓线 | QVAPOR | kg/kg | 插值到等压面 |
等压面 | 自定义数组 | mb(hPa) | 建议覆盖 1000–100 hPa |
# 读取第一个时次
p_hpa = getvar(nc, "pressure", timeidx=0) # hPa
T_k = getvar(nc, "tk", timeidx=0) # K
Q = getvar(nc, "QVAPOR", timeidx=0) # kg/kg
SST = getvar(nc, "SST", timeidx=0) # K
slp = getvar(nc, "slp", timeidx=0) *100 # Pa
potential_intensity 需要输入变量位于等压面上。这里选择 19 个标准层,从地面到 100 hPa。
plevs = np.array([1000, 950, 900, 850, 800, 750, 700, 650, 600,
550, 500, 450, 400, 350, 300, 250, 200, 150, 100]) # mb
T_iso = interplevel(T_k, p_hpa, plevs) # (level, south_north, west_east)
Q_iso = interplevel(Q, p_hpa, plevs)
print("T_iso shape:", T_iso.shape)
print("Q_iso shape:", Q_iso.shape)
print("等压面:", T_iso["level"].values, "hPa")
T_iso shape: (19, 437, 447)
Q_iso shape: (19, 437, 447)
等压面: [1000 950 900 850 800 750 700 650 600 550 500 450 400 350
300 250 200 150 100] hPa
本文件网格为 (695, 1011)。为便于教学演示,先对原场做稀疏采样;需要完整分辨率时,去掉 isel 即可。
注意:插值后高层可能存在 NaN(模式顶层以上无数据),
potential_intensity会自动处理缺失值。
# 稀疏采样(每第 4 个网格点),加快计算
# 调用 SKYBorn potential_intensity
pmin, vmax, flag = potential_intensity(
to_np(SST),
to_np(slp),
plevs,
to_np(T_iso),
to_np(Q_iso)
)
print(f"计算标志 flag = {flag}")
print(f"Pmin 范围:{np.nanmin(pmin):.1f} ~ {np.nanmax(pmin):.1f} hPa")
print(f"Vmax 范围:{np.nanmin(vmax):.1f} ~ {np.nanmax(vmax):.1f} m/s")
Missing values detected in: temperature(NaN), mixing_ratio(NaN). Using missing value handling version.
计算标志 flag = 1
Pmin 范围:912.0 ~ 1008.3 hPa
Vmax 范围:0.0 ~ 80.4 m/s
fig, ax = plt.subplots(
1, 1, figsize=(12, 8),
subplot_kw={"projection": ccrs.PlateCarree()}
)
lon = T_iso.XLONG.values
lat = T_iso.XLAT.values
cf = ax.pcolormesh(
lon, lat,vmax,
transform=ccrs.PlateCarree(),
cmap="YlOrRd",
shading="auto"
)
ax.coastlines(resolution="10m", linewidth=0.8)
ax.add_feature(cfeature.BORDERS, linestyle=":")
gl = ax.gridlines(draw_labels=True, linewidth=0.5, color="gray", alpha=0.5, linestyle="--")
gl.top_labels = False
gl.right_labels = False
cbar = plt.colorbar(cf, ax=ax, shrink=0.8, pad=0.02)
cbar.set_label("Vmax (m s$^{-1}$)")
ax.set_title("WRF Potential Intensity - Maximum Wind Speed (SKYBorn)\n2024-09-13 21:00 UTC")
plt.tight_layout()
plt.show()
output
fig, ax = plt.subplots(
1, 1, figsize=(12, 8),
subplot_kw={"projection": ccrs.PlateCarree()}
)
cf = ax.pcolormesh(
lon, lat, pmin,
transform=ccrs.PlateCarree(),
cmap="YlGnBu_r",
shading="auto"
)
ax.coastlines(resolution="10m", linewidth=0.8)
ax.add_feature(cfeature.BORDERS, linestyle=":")
gl = ax.gridlines(draw_labels=True, linewidth=0.5, color="gray", alpha=0.5, linestyle="--")
gl.top_labels = False
gl.right_labels = False
cbar = plt.colorbar(cf, ax=ax, shrink=0.8, pad=0.02)
cbar.set_label("Pmin (hPa)")
ax.set_title("WRF Potential Intensity - Minimum Central Pressure (SKYBorn)\n2024-09-13 21:00 UTC")
plt.tight_layout()
plt.show()
output
本教程演示如何:
potential_intensity 函数计算热带气旋潜在强度。函数说明
from skyborn.calc import potential_intensity
pmin, vmax, flag = potential_intensity( sst, # 海表温度,K(标量或 2D 网格) psl, # 海平面气压,Pa(标量或 2D 网格) pressure_levels, # 等压面数组,单位 mb(hPa) temperature, # 温度,K,形状 (level, lat, lon) 或 (level,) mixing_ratio # 水汽混合比,kg/kg,与 temperature 同形状 )
!pip install skyborn -i https://pypi.mirrors.ustc.edu.cn/simple/
Looking in indexes: https://pypi.mirrors.ustc.edu.cn/simple/
Collecting skyborn
Downloading https://mirrors.ustc.edu.cn/pypi/packages/0b/9e/653b69973e8593c7f21bdd18bacca1b7796702c205711b843c1381b69ad6/skyborn-0.4.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.7 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 984.1 kB/s eta 0:00:000:00:01
[?25hRequirement already satisfied: numpy in /opt/conda/lib/python3.11/site-packages (from skyborn) (1.26.4)
Requirement already satisfied: pandas in /opt/conda/lib/python3.11/site-packages (from skyborn) (2.2.3)
Requirement already satisfied: xarray in /opt/conda/lib/python3.11/site-packages (from skyborn) (2024.3.0)
Requirement already satisfied: matplotlib in /opt/conda/lib/python3.11/site-packages (from skyborn) (3.9.1)
Requirement already satisfied: netCDF4 in /opt/conda/lib/python3.11/site-packages (from skyborn) (1.6.3)
Requirement already satisfied: metpy in /opt/conda/lib/python3.11/site-packages (from skyborn) (1.6.3)
Requirement already satisfied: tqdm in /opt/conda/lib/python3.11/site-packages (from skyborn) (4.67.0)
Requirement already satisfied: statsmodels in /opt/conda/lib/python3.11/site-packages (from skyborn) (0.14.4)
Requirement already satisfied: scipy in /opt/conda/lib/python3.11/site-packages (from skyborn) (1.14.1)
Requirement already satisfied: scikit-learn in /opt/conda/lib/python3.11/site-packages (from skyborn) (1.6.0)
Requirement already satisfied: dask in /opt/conda/lib/python3.11/site-packages (from skyborn) (2024.8.1)
Requirement already satisfied: click>=8.1 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (8.1.7)
Requirement already satisfied: cloudpickle>=3.0.0 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (3.1.0)
Requirement already satisfied: fsspec>=2021.09.0 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (2025.2.0)
Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (24.1)
Requirement already satisfied: partd>=1.4.0 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (1.4.2)
Requirement already satisfied: pyyaml>=5.3.1 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (6.0.2)
Requirement already satisfied: toolz>=0.10.0 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (1.0.0)
Requirement already satisfied: importlib-metadata>=4.13.0 in /opt/conda/lib/python3.11/site-packages (from dask->skyborn) (8.5.0)
Requirement already satisfied: contourpy>=1.0.1 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (1.3.1)
Requirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (4.55.3)
Requirement already satisfied: kiwisolver>=1.3.1 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (1.4.7)
Requirement already satisfied: pillow>=8 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (9.4.0)
Requirement already satisfied: pyparsing>=2.3.1 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (3.2.0)
Requirement already satisfied: python-dateutil>=2.7 in /opt/conda/lib/python3.11/site-packages (from matplotlib->skyborn) (2.9.0.post0)
Requirement already satisfied: pint>=0.17 in /opt/conda/lib/python3.11/site-packages (from metpy->skyborn) (0.24.4)
Requirement already satisfied: pooch>=1.2.0 in /opt/conda/lib/python3.11/site-packages (from metpy->skyborn) (1.8.2)
Requirement already satisfied: pyproj>=3.0.0 in /opt/conda/lib/python3.11/site-packages (from metpy->skyborn) (3.5.0)
Requirement already satisfied: traitlets>=5.0.5 in /opt/conda/lib/python3.11/site-packages (from metpy->skyborn) (5.14.3)
Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.11/site-packages (from pandas->skyborn) (2024.1)
Requirement already satisfied: tzdata>=2022.7 in /opt/conda/lib/python3.11/site-packages (from pandas->skyborn) (2024.2)
Requirement already satisfied: cftime in /opt/conda/lib/python3.11/site-packages (from netCDF4->skyborn) (1.6.4)
Requirement already satisfied: joblib>=1.2.0 in /opt/conda/lib/python3.11/site-packages (from scikit-learn->skyborn) (1.4.2)
Requirement already satisfied: threadpoolctl>=3.1.0 in /opt/conda/lib/python3.11/site-packages (from scikit-learn->skyborn) (3.5.0)
Requirement already satisfied: patsy>=0.5.6 in /opt/conda/lib/python3.11/site-packages (from statsmodels->skyborn) (1.0.1)
Requirement already satisfied: zipp>=3.20 in /opt/conda/lib/python3.11/site-packages (from importlib-metadata>=4.13.0->dask->skyborn) (3.21.0)
Requirement already satisfied: locket in /opt/conda/lib/python3.11/site-packages (from partd>=1.4.0->dask->skyborn) (1.0.0)
Requirement already satisfied: platformdirs>=2.1.0 in /opt/conda/lib/python3.11/site-packages (from pint>=0.17->metpy->skyborn) (4.3.6)
Requirement already satisfied: typing_extensions>=4.0.0 in /opt/conda/lib/python3.11/site-packages (from pint>=0.17->metpy->skyborn) (4.12.2)
Requirement already satisfied: flexcache>=0.3 in /opt/conda/lib/python3.11/site-packages (from pint>=0.17->metpy->skyborn) (0.3)
Requirement already satisfied: flexparser>=0.4 in /opt/conda/lib/python3.11/site-packages (from pint>=0.17->metpy->skyborn) (0.4)
Requirement already satisfied: requests>=2.19.0 in /opt/conda/lib/python3.11/site-packages (from pooch>=1.2.0->metpy->skyborn) (2.32.3)
Requirement already satisfied: certifi in /opt/conda/lib/python3.11/site-packages (from pyproj>=3.0.0->metpy->skyborn) (2024.12.14)
Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->skyborn) (1.17.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.11/site-packages (from requests>=2.19.0->pooch>=1.2.0->metpy->skyborn) (3.4.0)
Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.11/site-packages (from requests>=2.19.0->pooch>=1.2.0->metpy->skyborn) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.11/site-packages (from requests>=2.19.0->pooch>=1.2.0->metpy->skyborn) (2.2.3)
Installing collected packages: skyborn
Successfully installed skyborn-0.4.1
import os
import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from netCDF4 import Dataset
from wrf import getvar, interplevel, to_np
from skyborn.calc import potential_intensity
wrf_file = "/home/mw/input/typhoon9537/wrfout_d01_2019-08-08_21_00_00"
if not os.path.exists(wrf_file):
raise FileNotFoundError(f"未找到文件:{wrf_file}")
nc = Dataset(wrf_file)
print("WRF 文件已打开")
WRF 文件已打开
计算 PI 需要以下输入:
变量 | WRF 变量 | 单位 | 说明 |
|---|---|---|---|
SST | SST | K | 海表温度 |
海平面气压 | PSFC 或 slp | Pa | 函数要求 Pa;若用 slp 需转换为 Pa |
温度廓线 | tk | K | 插值到等压面 |
比湿廓线 | QVAPOR | kg/kg | 插值到等压面 |
等压面 | 自定义数组 | mb(hPa) | 建议覆盖 1000–100 hPa |
# 读取第一个时次
p_hpa = getvar(nc, "pressure", timeidx=0) # hPa
T_k = getvar(nc, "tk", timeidx=0) # K
Q = getvar(nc, "QVAPOR", timeidx=0) # kg/kg
SST = getvar(nc, "SST", timeidx=0) # K
slp = getvar(nc, "slp", timeidx=0) *100 # Pa
potential_intensity 需要输入变量位于等压面上。这里选择 19 个标准层,从地面到 100 hPa。
plevs = np.array([1000, 950, 900, 850, 800, 750, 700, 650, 600,
550, 500, 450, 400, 350, 300, 250, 200, 150, 100]) # mb
T_iso = interplevel(T_k, p_hpa, plevs) # (level, south_north, west_east)
Q_iso = interplevel(Q, p_hpa, plevs)
print("T_iso shape:", T_iso.shape)
print("Q_iso shape:", Q_iso.shape)
print("等压面:", T_iso["level"].values, "hPa")
T_iso shape: (19, 437, 447)
Q_iso shape: (19, 437, 447)
等压面: [1000 950 900 850 800 750 700 650 600 550 500 450 400 350
300 250 200 150 100] hPa
本文件网格为 (695, 1011)。为便于教学演示,先对原场做稀疏采样;需要完整分辨率时,去掉 isel 即可。
注意:插值后高层可能存在 NaN(模式顶层以上无数据),
potential_intensity会自动处理缺失值。
# 稀疏采样(每第 4 个网格点),加快计算
# 调用 SKYBorn potential_intensity
pmin, vmax, flag = potential_intensity(
to_np(SST),
to_np(slp),
plevs,
to_np(T_iso),
to_np(Q_iso)
)
print(f"计算标志 flag = {flag}")
print(f"Pmin 范围:{np.nanmin(pmin):.1f} ~ {np.nanmax(pmin):.1f} hPa")
print(f"Vmax 范围:{np.nanmin(vmax):.1f} ~ {np.nanmax(vmax):.1f} m/s")
Missing values detected in: temperature(NaN), mixing_ratio(NaN). Using missing value handling version.
计算标志 flag = 1
Pmin 范围:912.0 ~ 1008.3 hPa
Vmax 范围:0.0 ~ 80.4 m/s
fig, ax = plt.subplots(
1, 1, figsize=(12, 8),
subplot_kw={"projection": ccrs.PlateCarree()}
)
lon = T_iso.XLONG.values
lat = T_iso.XLAT.values
cf = ax.pcolormesh(
lon, lat,vmax,
transform=ccrs.PlateCarree(),
cmap="YlOrRd",
shading="auto"
)
ax.coastlines(resolution="10m", linewidth=0.8)
ax.add_feature(cfeature.BORDERS, linestyle=":")
gl = ax.gridlines(draw_labels=True, linewidth=0.5, color="gray", alpha=0.5, linestyle="--")
gl.top_labels = False
gl.right_labels = False
cbar = plt.colorbar(cf, ax=ax, shrink=0.8, pad=0.02)
cbar.set_label("Vmax (m s$^{-1}$)")
ax.set_title("WRF Potential Intensity - Maximum Wind Speed (SKYBorn)\n2024-09-13 21:00 UTC")
plt.tight_layout()
plt.show()

output
fig, ax = plt.subplots(
1, 1, figsize=(12, 8),
subplot_kw={"projection": ccrs.PlateCarree()}
)
cf = ax.pcolormesh(
lon, lat, pmin,
transform=ccrs.PlateCarree(),
cmap="YlGnBu_r",
shading="auto"
)
ax.coastlines(resolution="10m", linewidth=0.8)
ax.add_feature(cfeature.BORDERS, linestyle=":")
gl = ax.gridlines(draw_labels=True, linewidth=0.5, color="gray", alpha=0.5, linestyle="--")
gl.top_labels = False
gl.right_labels = False
cbar = plt.colorbar(cf, ax=ax, shrink=0.8, pad=0.02)
cbar.set_label("Pmin (hPa)")
ax.set_title("WRF Potential Intensity - Minimum Central Pressure (SKYBorn)\n2024-09-13 21:00 UTC")
plt.tight_layout()
plt.show()

output
提示:
potential_intensity 的 psl 参数要求单位为 Pa。WRF 的 PSFC 直接是 Pa;若使用 slp(hPa),需乘以 100 转换。