Когда я даю graph_renderer.inspection_policy = NodesAndLinkedEdges()
, я теряю способность парить над краем, чтобы выделить его.Чтобы иметь эту функциональность, мне нужно установить graph_renderer.inspection_policy = EdgesAndLinkedNodes()
;но если я это сделаю, я потеряю информацию, которая появляется при наведении курсора на узлы - они отображаются как "???
".Как это исправить?
import networkx as nx
from bokeh.io import show, output_file
from bokeh.models import Plot, Range1d, MultiLine, Circle, HoverTool, TapTool, BoxSelectTool, WheelZoomTool
from bokeh.models.graphs import from_networkx, NodesAndLinkedEdges, EdgesAndLinkedNodes
from bokeh.palettes import Spectral4
G=nx.karate_club_graph()
plot = Plot(plot_width=400, plot_height=400,
x_range=Range1d(-1.1,1.1), y_range=Range1d(-1.1,1.1))
plot.title.text = "Graph Interaction Demonstration"
plot.add_tools(HoverTool(tooltips=None), TapTool(), BoxSelectTool())
graph_renderer = from_networkx(G, nx.circular_layout, scale=1, center=(0,0))
graph_renderer.node_renderer.glyph = Circle(size=15, fill_color=Spectral4[0])
graph_renderer.node_renderer.selection_glyph = Circle(size=15, fill_color=Spectral4[2])
graph_renderer.node_renderer.hover_glyph = Circle(size=15, fill_color=Spectral4[1])
graph_renderer.edge_renderer.glyph = MultiLine(line_color="#CCCCCC", line_alpha=0.8, line_width=5)
graph_renderer.edge_renderer.selection_glyph = MultiLine(line_color=Spectral4[2], line_width=5)
graph_renderer.edge_renderer.hover_glyph = MultiLine(line_color=Spectral4[1], line_width=5)
graph_renderer.selection_policy = NodesAndLinkedEdges()
graph_renderer.inspection_policy = EdgesAndLinkedNodes()
hover = HoverTool(tooltips=[("Name:", "@name")])
plot.add_tools(hover, TapTool(), BoxSelectTool(), WheelZoomTool())
'''
Below is the relevant line of code.
I can't have hoverinfo if I don't set "graph_renderer.inspection_policy = NodesAndLinkedEdges()"
But if I do, I cannot highlight an edge by hovering over it.
To be able to highlight an edge by hovering over it, I need to set "graph_renderer.inspection_policy = EdgesAndLinkedNodes()"
But if I do that, I get "???" when hovering over the nodes.
How can I keep both?
'''
graph_renderer.inspection_policy = NodesAndLinkedEdges()
graph_renderer.node_renderer.data_source.data['name'] = list(G.nodes)
plot.renderers.append(graph_renderer)
output_file("interactive_graphs.html")
show(plot)
Этот показывает 4 различных способа использования hovertool -
- График с помощью инструмента наведения, который выделяет края, соединенные сточка
- График, который подсвечивает ребра выбранного узла (по щелчку)
- График, который подсвечивает узлы, примыкающие к краю, где находится курсор,
- График, который подсвечивает соседние узлык выбранным ребрам (щелкнул)
Итак, нельзя ли одновременно навести курсор для выделения края и навести курсор для отображения информации об узле вместе?