Как отобразить метки набора данных внутри HoverTool на диаграмме Санки, используя Holoviews и Bokeh - PullRequest
0 голосов
/ 24 марта 2019

Я использую Holoviews для отображения Диаграммы Санки и хотел бы настроить информацию, отображаемую при наведении курсора на диаграмму. Однако я не знаю, как отображать правильные метки.

Взяв 2-й пример из документов , я могу добавить пользовательский HoverTool

import holoviews as hv
from holoviews import opts
from bokeh.models import HoverTool 

nodes = ["PhD", "Career Outside Science",  "Early Career Researcher", "Research Staff",
         "Permanent Research Staff",  "Professor",  "Non-Academic Research"]
nodes = hv.Dataset(enumerate(nodes), 'index', 'label')
edges = [
    (0, 1, 53), (0, 2, 47), (2, 6, 17), (2, 3, 30), (3, 1, 22.5), (3, 4, 3.5), (3, 6, 4.), (4, 5, 0.45)   
]

value_dim = hv.Dimension('Percentage', unit='%')
careers = hv.Sankey((edges, nodes), ['From', 'To'], vdims=value_dim)

# this is my custom HoverTool
hover = HoverTool(
    tooltips = [
        ("From": "@From"), # this displays the index: "0", "1" etc. 
        ("To": "@To"), # How to display the label ("PhD", "Career Outside Science", ...)?
   ]
)

careers.opts(
    opts.Sankey(labels='label', tools=[hover]))

То же, что в примере , показанном в документах , HoverTool отображает значения индекса для «От» и «До» (например, «0», «1») и т. Д., Которые делают не обязательно что-то значит для пользователя.

Есть ли способ отобразить соответствующую метку (например, "PhD", "Карьера вне науки", ...) в синтаксисе HooverTool?

Я использую Holoviews 1.11.2 и Bokeh 1.0.4.

1 Ответ

0 голосов
/ 25 марта 2019

Самый простой способ сделать это - просто предоставить метки вместо индексов элементу Sankey:

nodes = ["PhD", "Career Outside Science",  "Early Career Researcher", "Research Staff",
         "Permanent Research Staff",  "Professor",  "Non-Academic Research"]
edges = [
    (0, 1, 53), (0, 2, 47), (2, 6, 17), (2, 3, 30), (3, 1, 22.5), (3, 4, 3.5), (3, 6, 4.), (4, 5, 0.45)   
]

# Replace the indices with the labels
edges = [(nodes[s], nodes[e], v) for s, e, v in edges]

value_dim = hv.Dimension('Percentage', unit='%')
careers = hv.Sankey(edges, ['From', 'To'], vdims=value_dim)
careers.opts(labels='index', tools=['hover'])

enter image description here

Тем не менее, я думаю, что ваше ожидание того, что определение labels заставит его использовать столбец меток в узлах для извлечения меток при наведении границы, имеет смысл, и метки могут не быть уникальными, поэтому описанный выше подход в целом неприменим. Я отправлю вопрос в HoloViews.

...