Я использую Bokeh для отображения некоторых сетевых данных на приборной панели.
Фрагмент кода ниже показывает настройку сюжета:
import networkx as nx
from bokeh.models.graphs import from_networkx
p_network = figure(title="Correlation",
plot_width=400, plot_height=400,
x_range=(-2,2),y_range=(-2,2),
tools='', toolbar_location=None)
graph=nx.Graph(df)
graphNX = from_networkx(graph, nx.circular_layout, scale=1, center=(0,0))
p_network.renderers.append(graphNX)
Я сейчас пытаюсь добавить функцию обратного вызова, которая будет выполняться, когда мышь находится над одним узлом узлов. (Конечной целью будет изменение цвета точек на другом графике, но сейчас я просто хочу вывести «hello» на консоль)
code = """console.log('hello');"""
args = {"nodes": graphNX.node_renderer.data_source, "edges": graphNX.edge_renderer.data_source}
callback = CustomJS(args=args, code=code)
hover_tool = HoverTool(tooltips=None,callback=callback)
p_network.add_tools(hover_tool)
Этот код не работает и приводит к сообщению об ошибке «Ошибка типа: источник данных n.data_defined».
Я попробовал тот же метод с другим типом графика с другим источником данных:
points = p.circle(x="lon", y="lat", size=10, source=src)
...
args = {"points": points.data_source}
...
Здесь все работало нормально.
Поэтому я предполагаю, что способ добавления data_sources к обратному вызову является каким-то неправильным.
Кто-нибудь здесь имеет опыт работы с рендерингом графиков боке и как обращаться к источнику данных nxGraph?