Так что я думаю, что главное понять, что объясняется здесь : как объявляются прогнозы.Элементы (например, «Изображение», «Точки» и т. Д.) В GeoViews имеют параметр, называемый crs
, который объявляет систему координат, в которой находятся данные, в то время как параметр графика projection
указывает, на что проецировать данные для отображения.
В вашем случае, я думаю, вы хотите отобразить изображение в той же системе координат, в которой оно уже (Ламберт Конформаль), поэтому технически вам вообще не нужно объявлять систему координат (crs
) для элемента иможно просто использовать hv.Image
(что совершенно не известно о проекциях).
Насколько я могу судить, ваш код должен работать должным образом, если вы используете GeoViews 1.5, но я бы сделал следующее:
# Apply mask
masked = np.ma.filled(z, np.NaN)
# Declare image from data
goes = hv.Image((x, y, masked),['Lat', 'Lon'], 'ABI13')
# Declare some options
options = dict(width=1000, height=800, yaxis='left', colorbar=True,
toolbar='above', cmap='jet', projection=proj)
# Display plot
gf.ocean * gf.land * goes.options(**options) * gf.coastline.options(show_bounds=False)
Обратите внимание, как мы объявляем проекцию на изображении, но не crs.Если вы хотите отобразить данные в другой проекции, в которой они определены, вам нужно объявить crs
и использовать gv.Image
.В этом случае я бы рекомендовал использовать project_image
с включенной опцией быстрого доступа (что может привести к появлению некоторых артефактов, но на много быстрее):
# Apply mask
masked = np.ma.filled(z, np.NaN)
# Declare the gv.Image with the crs
goes = gv.Image((x, y, masked), ['Lat', 'Lon'], 'ABI13', crs=proj)
# Now regrid the data and apply the reprojection
projected_goes = gv.operation.project_image(goes, fast=False, projection=ccrs.GOOGLE_MERCATOR)
# Declare some options
options = dict(width=1000, height=800, yaxis='left', colorbar=True,
toolbar='above', cmap='jet')
# Display plot
projected_goes.options(**options) * gv.tile_sources.ESRI.options(show_bounds=False)
Еще один последний совет: когда вы наносите с помощью bokeh все данные, которые вы выводите, будут отправляться в браузер, поэтому при работе с изображениями, размер которых больше, чем вы уже используете, я бы порекомендовал использовать holoviews.Регрид операция, которая использует dashashader для динамического изменения размера изображения при масштабировании.Чтобы использовать это просто примените операцию к изображению следующим образом:
from holoviews.operation.datashader import regrid
regridded = regrid(goes)