转换 metpy 单位 GFS precipitation_rate
convert metpy units GFS precipitation_rate
我按照此处的示例 (https://unidata.github.io/python-gallery/examples/Precipitation_Map.html) 但是在尝试访问单位时出现维度错误。我假设这与 pint
及其解析单位的方式有关,事实上降水是一个比率。任何帮助将不胜感激
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import metpy
import datetime
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from xarray.backends import NetCDF4DataStore
import xarray as xr
import numpy as np
from metpy.units import masked_array, units
from siphon.catalog import TDSCatalog
best_gfs = TDSCatalog('http://thredds.ucar.edu/thredds/catalog/grib/NCEP/GFS/'
'Global_0p25deg/catalog.xml?dataset=grib/NCEP/GFS/Global_0p25deg/Best')
best_gfs.datasets
best_ds = list(best_gfs.datasets.values())[0]
ncss = best_ds.subset()
query = ncss.query()
query.lonlat_box(-66.243114,-25.762908,-28.708933, -2.191886).time_range(datetime.datetime.utcnow(), datetime.datetime.utcnow() + datetime.timedelta(days=10))
query.accept('netcdf4')
query.variables('Precipitation_rate_surface')
data = ncss.get_data(query)
data = xr.open_dataset(NetCDF4DataStore(data))
lon_2d, lat_2d = np.meshgrid(data['lon'], data['lat'])
precip = data['Precipitation_rate_surface']
precip.metpy.units
这是因为该变量的单位字符串是 kg.m-2.s-1
,这是一个 UDUnits-compatible 字符串,但不适用于 Pint 中的默认单位解析器,这就是MetPy 用于单元支持。
这已在 MetPy 1.0 中修复。您可以使用 conda 安装 MetPy 1.0 的第二个候选版本:
conda install -c conda-forge/label/metpy_rc metpy=1.0
或使用 pip:
pip install --pre metpy=1.0
MetPy < 1.0 的解决方法是在调用 precip.metpy.units
之前覆盖单元元数据:
precip.attrs['units'] = 'kg m^-2 s^-1'
我按照此处的示例 (https://unidata.github.io/python-gallery/examples/Precipitation_Map.html) 但是在尝试访问单位时出现维度错误。我假设这与 pint
及其解析单位的方式有关,事实上降水是一个比率。任何帮助将不胜感激
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import metpy
import datetime
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from xarray.backends import NetCDF4DataStore
import xarray as xr
import numpy as np
from metpy.units import masked_array, units
from siphon.catalog import TDSCatalog
best_gfs = TDSCatalog('http://thredds.ucar.edu/thredds/catalog/grib/NCEP/GFS/'
'Global_0p25deg/catalog.xml?dataset=grib/NCEP/GFS/Global_0p25deg/Best')
best_gfs.datasets
best_ds = list(best_gfs.datasets.values())[0]
ncss = best_ds.subset()
query = ncss.query()
query.lonlat_box(-66.243114,-25.762908,-28.708933, -2.191886).time_range(datetime.datetime.utcnow(), datetime.datetime.utcnow() + datetime.timedelta(days=10))
query.accept('netcdf4')
query.variables('Precipitation_rate_surface')
data = ncss.get_data(query)
data = xr.open_dataset(NetCDF4DataStore(data))
lon_2d, lat_2d = np.meshgrid(data['lon'], data['lat'])
precip = data['Precipitation_rate_surface']
precip.metpy.units
这是因为该变量的单位字符串是 kg.m-2.s-1
,这是一个 UDUnits-compatible 字符串,但不适用于 Pint 中的默认单位解析器,这就是MetPy 用于单元支持。
这已在 MetPy 1.0 中修复。您可以使用 conda 安装 MetPy 1.0 的第二个候选版本:
conda install -c conda-forge/label/metpy_rc metpy=1.0
或使用 pip:
pip install --pre metpy=1.0
MetPy < 1.0 的解决方法是在调用 precip.metpy.units
之前覆盖单元元数据:
precip.attrs['units'] = 'kg m^-2 s^-1'