【问题标题】:Metpy HRRR Cross SectionMetpy HRRR 横截面
【发布时间】:2019-06-28 16:58:48
【问题描述】:

我正在创建 HRRR 模型输出的横截面,我已经使用 xarray 和 pynio 作为引擎读取了 grib 文件,然后将这些文件转换为 netcdf,以便我可以在我的 Windows 机器上使用它们,因此我是想知道这是否导致了这些问题。

这是我的数据集在使用 xarray 读取 netcdf 后的样子:Imgur

读入数据后,我尝试通过解析数据来遵循 Metpy 横截面/Xarray 教程:

data = ds.metpy.parse_cf()

这会产生这个新数据集:Imgur 它创建了 crs 坐标,所以我认为它工作正常。

在此之后,我创建了一个 700mb RH、风和海拔(不同的数据集)的等值线图,我从数据集中解析了 RH 并提取了 x 和 y

RH = data.metpy.parse_cf('RH_P0_L100_GLC0')
x, y = RH.metpy.coordinates('x', 'y')

这一切都奏效了,我可以制作一个漂亮的情节没有问题。所以接下来我想做一个横截面。按照文档中的示例:

start = (40.3847, -120.5676)
end = (39.2692, -122.3784)
cross = cross_section(data, start, end)

这给出了这些错误:Imgur

然后我尝试使用上面的 RH 变量,因为

RH.metpy.x 

给出了 x 维度。但是运行

cross = cross_section(RH, start, end)

改为给出此错误:Imgur

所以我只是想知道我是否错过了解析原始数据集的步骤,或者 grib 到 netcdf 的转换是否搞砸了,或者是否甚至可以使用metpy?

一般来说,我只是在努力创建一个类似于示例中的横截面:https://unidata.github.io/MetPy/latest/examples/cross_section.html#sphx-glr-examples-cross-section-py

作为一个额外的问题,是否可以在地块下填充地形?

【问题讨论】:

    标签: python-3.x weather python-xarray metpy


    【解决方案1】:

    我也有几乎同样的问题。

    ValueError:数据缺少所需的坐标信息。验证您的数据是否已被 MetPy 解析为具有正确的 x 和 y 维度坐标,并为每个变量添加了正确投影的 crs 坐标。

    如果我试试这个:

    cross = cross_section(data, start, end)
    

    xarray 看起来像这样:

    <xarray.Dataset>
    Dimensions:           (bnds: 2, height: 61, height_2: 1, height_3: 60, height_4: 61, height_5: 1, lat: 101, lev: 1, lev_2: 1, lev_3: 1, lon: 121, time: 24)
    Coordinates:
      * height            (height) float64 1.0 2.0 3.0 4.0 ... 58.0 59.0 60.0 61.0
      * height_3          (height_3) float64 1.0 2.0 3.0 4.0 ... 57.0 58.0 59.0 60.0
      * lev               (lev) float64 0.0
      * lev_2             (lev_2) float64 400.0
      * lev_3             (lev_3) float64 800.0
      * lon               (lon) float64 -30.0 -29.5 -29.0 -28.5 ... 29.0 29.5 30.0
      * lat               (lat) float64 -10.0 -9.5 -9.0 -8.5 ... 38.5 39.0 39.5 40.0
        crs               object Projection: latitude_longitude
      * height_2          (height_2) float64 10.0
      * time              (time) float64 2.017e+07 2.017e+07 ... 2.017e+07 2.017e+07
      * height_4          (height_4) float64 1.0 2.0 3.0 4.0 ... 58.0 59.0 60.0 61.0
      * height_5          (height_5) float64 2.0
    Dimensions without coordinates: bnds
    Data variables:
        height_bnds       (height, bnds) float64 ...
        height_3_bnds     (height_3, bnds) float64 ...
        lev_bnds          (lev, bnds) float64 ...
        lev_2_bnds        (lev_2, bnds) float64 ...
        lev_3_bnds        (lev_3, bnds) float64 ...
        z_ifc             (height, lat, lon) float32 ...
        topography_c      (lat, lon) float32 ...
        fis               (lat, lon) float32 ...
        con_gust          (time, height_2, lat, lon) float32 ...
        gust10            (time, height_2, lat, lon) float32 ...
        u                 (time, height_3, lat, lon) float32 ...
    

    我的意思是有一个 lat lon 网格...有没有一种解决方法可以将 cross_section 用于 lat lon 网格? 或者我可以将 lat lon 重命名为 x 和 y 吗?

    最好的

    【讨论】:

      【解决方案2】:

      目前,MetPy's cross section interpolation 依赖于 Dataset/DataArray 中存在的 x 和 y 维度作为维度坐标(请参阅 xarray 文档here 中的描述)。在您的数据集中,ygrid_0xgrid_0 的 x 和 y 维度被列为没有坐标的维度,因此存在问题。

      但是,由于这种情况在气象数据文件中很常见,因此 MetPy 目前的实施可能过于严格。我建议在MetPy's issue tracker 上打开一个问题。

      关于你的附加问题,只要你的地形水平数据与你的数据在同一垂直坐标,你可以使用matplotlib中的fill_between()方法来填充地块下的地形。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-10
        • 2020-07-21
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 1970-01-01
        • 2021-06-25
        • 1970-01-01
        相关资源
        最近更新 更多