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?
Лучший