Изображение Holoviews с подсказкой HoverTool из другого источника данных - PullRequest
2 голосов
/ 26 февраля 2020

У меня есть сетка 100x100 км GeoDataFrame (Mollweide), которую я строю как gv.Image с классифицированными значениями (8 категорий) через Holoviews / Bokeh:

# convert GeoDataFrame to xarray object
xa_dataset = gv.Dataset(grid.to_xarray(), vdims=f'{metric}_cat', crs=crs.Mollweide())
# convert to gv.Image
img_grid = xa_dataset.to(gv.Image)
# custom tooltip
hover = HoverTool(
    tooltips=[
        ("index", "$index"),
        ("data (using $) (x,y)", "($x, $y)"),
        ("data (using @) (x,y)", "(@x, @y)"),
        ("canvas (x,y)", "($sx, $sy)"),
        ("Category", "@image"),
    ])
image_layer = img_grid.opts(
        cmap=cmap_with_nodata,
        colorbar=True,
        colorbar_opts={
            'formatter': formatter,
            'major_label_text_align':'left'},
        tools=[hover],
        # optional unpack of width and height
        **{k: v for k, v in optional_kwargs.items() if v is not None}
    )
# combine layers and set global plotting options
gv_layers = (image_layer * gf.coastline * gf.borders).opts(
    projection=crs.Mollweide(),
    global_extent=True,
    responsive=responsive,
    finalize_hooks=[set_active_tool],
    title_format=title)

Я могу отобразить значения изображения как Всплывающие подсказки HoverTool, приведенные выше приведут к следующей всплывающей подсказке:

enter image description here

Однако, чтобы сделать это более полезным, я хотел бы показать точные значения для каждая ячейка из моего исходного GeoDataFrame, а не классифицированные значения из изображения (ссылочный номер класса показан выше с Category во всплывающей подсказке). canvas (x,y) указывает на мои x и y корзины из моего GeoDataFrame. Можно ли сделать запрос всплывающей подсказки в моем исходном GeoDataFrame, чтобы показать точные значения каждого бина, а не классифицированных?

Я пытался создать дополнительный bokeh.plotting.ColumnDataSource:

grid_df = pd.DataFrame(grid[[col for col in grid.columns if col != grid._geometry_column_name]])
source = ColumnDataSource.from_df(grid_df)

Но я не знаю, как добавить этот источник «невидимый» поверх слоя gv.Image только для того, чтобы показывать всплывающие подсказки с точными значениями.

Я знаю, что это как-то противоречит принципу боке, что все, что Показано также должны быть включены в данные. Но в этом случае добавление точной информации всплывающей подсказки значительно повысило бы удобство использования интерактивного графика в моем контексте.

1 Ответ

1 голос
/ 26 февраля 2020

Сам нашел ответ: даже при использовании gv.Image я могу указать дополнительные vdims, например:

# xa_dataset from GeoDataFrame
# with additional vdims
xa_dataset = gv.Dataset(
    grid.to_xarray(),
    vdims=[f'{metric}_cat', 'postcount', 'usercount'],
    crs=crs.Mollweide())
# convert to gv.Image
img_grid = xa_dataset.to(gv.Image)
# custom tooltip
hover = HoverTool(
    tooltips=[
        ("Usercount", "@usercount{,f}"),
        ("Postcount",  "@postcount{,f}")
    ])

enter image description here

I на самом деле не понимаю, как эти дополнительные vdim хранятся в gv.Image, но это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...