Я пытаюсь получить отдельные всплывающие подсказки для узлов и ребер в Bokeh, но не смог заставить его работать. Может кто-то указать, что я делаю не так? Я считаю, что код должен выглядеть примерно так:
from bokeh.io import show, output_notebook
from bokeh.models import Plot, Range1d, MultiLine, Circle, HoverTool
from bokeh.models.graphs import from_networkx, NodesAndLinkedEdges, EdgesAndLinkedNodes
import networkx as nx
output_notebook()
# Generate data
G = nx.karate_club_graph()
nx.set_edge_attributes(G, nx.edge_betweenness_centrality(G), "betweenness_centrality")
# Setup plot
plot = Plot(plot_width=400, plot_height=400,
x_range=Range1d(-1.1, 1.1), y_range=Range1d(-1.1, 1.1))
graph_renderer = from_networkx(G, nx.spring_layout, scale=1, center=(0, 0))
graph_renderer.node_renderer.glyph = Circle(size=15)
graph_renderer.edge_renderer.glyph = MultiLine(line_alpha=0.8, line_width=1)
plot.renderers.append(graph_renderer)
# Add hover
node_hover_tool = HoverTool(renderers=[graph_renderer.node_renderer],
tooltips=[("index", "@index"), ("club", "@club")])
edge_hover_tool = HoverTool(renderers=[graph_renderer.edge_renderer],
tooltips=[("betweenness_centrality", "@betweenness_centrality")],
line_policy="interp")
plot.add_tools(node_hover_tool, edge_hover_tool)
# Show
show(plot)
Но я не вижу, чтобы это зависало. Я попробовал несколько вещей, чтобы обойти это:
- Если я уберу аргумент
renderers
, я смогу немного навести указатель мыши, но это не относится к нужным глифам.
- Если я уберу аргумент
renderers
из обоих HoverTool
s, я смогу получить правильные всплывающие подсказки на узлах вместе с betweenness_centrality: ??
- Если я удаляю аргумент
renderers
из обоих HoverTool
s и добавляю graph_renderer.inspection_policy = NodesAndLinkedEdges()
, я получаю правильные всплывающие подсказки на узлах
- Если я уберу аргумент
renderers
из обоих HoverTool
с и добавлю graph_renderer.inspection_policy = EdgesAndLinkedNodes()
, я получу правильные всплывающие подсказки по краям
Я полагаю, что этот вопрос задавался ранее в группе Google здесь , но не получил ответа.
Спасибо за любую помощь!