Я пытаюсь построить файл прогноза давления CMC grib2, используя matplotlib для построения контуров давления. Описание сетки grib2 можно найти здесь: https://weather.gc.ca/grib/grib2_reg_10km_e.html. Файл grib2 находится в этом каталоге: http://dd.weather.gc.ca/model_gem_regional/10km/grib2/00/000/ и начинается с CMC_reg_PRMSL_MSL_0_ps10km, за которым следует дата. Это гриб-файл, содержащий давление на среднем уровне моря.
Моя проблема заключается в том, что у меня в конечном итоге появляются контуры прямых линий, которые следуют линиям широты поверх контуров фактического давления. Я подумал, что это может быть из-за того, что я рисую в PlateCarree, а не в Geodetic, но контурный график не позволяет использовать Geodetic. Результат моего сюжета:
Код выглядит следующим образом:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import datetime as dt
import cartopy
import cartopy.crs as ccrs
import Nio
gr = Nio.open_file('./data/CMC_reg_PRMSL_MSL_0_ps10km_2018111800_P000.grib2', 'r')
print(gr)
names = gr.variables.keys()
print("Variable Names:", names)
dims = gr.dimensions
print("Dimensions: ", dims)
attr = gr.attributes.keys()
print("Attributes: ", attr)
obs = gr.variables['PRMSL_P0_L101_GST0'][:]
lats = gr.variables["gridlat_0"][:]
lons = gr.variables["gridlon_0"][:]
fig = plt.figure(figsize=(15, 2))
intervals = range(95000, 105000, 400)
ax=plt.axes([0.,0.,1.,1.],projection=ccrs.PlateCarree())
obsobj = plt.contour(lons, lats, obs, intervals, cmap='jet',transform=ccrs.PlateCarree())
states_provinces = cartopy.feature.NaturalEarthFeature(
category='cultural',
name='admin_1_states_provinces_lines',
scale='50m',
facecolor='none')
ax.add_feature(cartopy.feature.BORDERS)
ax.coastlines(resolution='10m')
ax.add_feature(states_provinces,edgecolor='gray')
obsobj.clabel()
colbar =plt.colorbar(obsobj)
Мы ценим любые предложения.
ОБНОВИТЬ
Для тех, у кого нет PyNIO, следующее может быть использовано для воспроизведения с использованием файлов дампа в разделе комментариев.
Просто удалите все ссылки на NIO и замените значения lats, lons, obs следующим.
lats = np.load('lats.dump')
lons = np.load('lons.dump')
obs = np.load('obs.dump')