) Я смог привести рабочий пример.

ользую следующий код для создания интерактивного сетевого графика боке. Как добавить имя узлов к узлам на графике боке?

from bokeh.io import show, output_notebook
from bokeh.models import Plot, Range1d, MultiLine, Circle, HoverTool, TapTool, BoxSelectTool
from bokeh.models.graphs import from_networkx, NodesAndLinkedEdges, EdgesAndLinkedNodes
from bokeh.palettes import Spectral4
from bokeh.models import LabelSet

plot = Plot(plot_width=900, plot_height=500,
            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.node_renderer.glyph.properties_with_values()
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()

plot.renderers.append(graph_renderer)

show(plot)

результирующий боке networkx graph:

Ответы на вопрос(2)

что вы имеете в виду интерактивные метки для узлов, что я тоже хотел сделать. Для этого вам нужно изменить пару строк:

hover = HoverTool(tooltips=[("Name:", "@name")])
plot.add_tools(hover, TapTool(), BoxSelectTool(), WheelZoomTool())
...
graph_renderer.inspection_policy = NodesAndLinkedEdges()

Затем измените источник данных для узлов:

graph_renderer.node_renderer.data_source.data['name'] = [name1, ... ,nameN]

(источник данных уже существует; это словарь, для которого единственным ключом является 'index', нумерованный список узлов. Таким образом, вы можете добавить больше ключей, которые ссылаются на списки одинаковой длины - например, список имен - и эти списки можно получить доступ через '@key')

 Paul Brown17 февр. 2018 г., 00:06
Это должно быть в документах! Спасибо.
 jdmarino20 сент. 2018 г., 15:37
Я обнаружил, что graph_renderer.node_renderer.data_source.data - это диктовка с записью «index», значением которой был список имен узлов, начиная с момента создания сети. Таким образом, hover = HoverTool (tooltips = [('', '@ index')]) - все, что мне было нужно.

что только что получил это. Они могут быть более питоническими способами, но то, что я сделал, было

Создайте источник данных с соответствующими меткамиПолучить позиции из графика, используя pos = nx.circular_layout (G)добавить эти позиции в мой источник данныхСоздайте LabelSet из позиций и источника

Леонардо, вам не хватает линии, где создается G. Я взял karate_club_graph, и это работает для меня:

from bokeh.models import ColumnDataSource
pos = nx.circular_layout(G)
x,y=zip(*pos.values())

source = ColumnDataSource({'x':x,'y':y,'kid':['Joe %d' %ix for ix in range(len(x))]})
labels = LabelSet(x='x', y='y', text='kid', source=source)

plot.renderers.append(labels)

Ваш ответ на вопрос