Metpy HRRR Поперечное сечение

Я работаю над созданием сечений вывода модели HRRR, я прочитал в файлах grib, используя xarray с pynio в качестве движка, а затем преобразовал эти файлы в netcdf, чтобы я мог работать с ними на моем компьютере с Windows, поэтому мне интересно, если это вызывает эти проблемы.

Вот как выглядит мой набор данных после прочтения в netcdf с помощью xarray: Imgur

После прочтения данных я стараюсь следовать сечениям Metpy и учебникам по Xarray, анализируя данные:

data = ds.metpy.parse_cf()

Который дает этот новый набор данных: Imgur. Он создал координату crs, поэтому я предположил, что она работает несколько корректно.

После этого я создал контурную карту относительной влажности 700 МБ, ветра и высоты (другой набор данных), где я проанализировал относительную влажность из набора данных, а также вытащил 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 

дал х-измерение. Но работает

cross = cross_section(RH, start, end)

дал эту ошибку вместо: Imgur

Так что мне просто интересно, пропустил ли я какой-то шаг в разборе исходного набора данных или преобразование grib в netcdf испортило что-то или это вообще возможно с помощью metpy?

В общем, я просто работаю над созданием поперечного сечения, как показано в примере: https://unidata.github.io/MetPy/latest/examples/cross_section.html

В качестве дополнительного вопроса можно ли заполнить местность под участками?

1 ответ

В настоящее время интерполяция сечения MetPy основана на измерениях x и y, присутствующих в наборе данных / массиве данных в качестве координат измерений (см. Описание в документации по xarray здесь). В вашем наборе данных размеры x и y ygrid_0 а также xgrid_0 указаны как размеры без координат, отсюда и проблема.

Однако, поскольку такая ситуация обычно встречается в файлах метеорологических данных, текущая реализация MetPy может быть слишком строгой. Я бы предложил открыть проблему на трекере MetPy.

Что касается вашего бонусного вопроса, если у вас есть данные уровня местности в той же вертикальной координате, что и ваши данные, вы можете использовать fill_between() метод в matplotlib для заполнения местности под участками.

У меня почти такая же проблема.

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 ...

Я имею в виду, что есть сетка широты и долготы... есть ли обходной путь для использования cross_section для сетки широты и долготы? или я могу переименовать lat lon в x и y?

Лучший

Другие вопросы по тегам