Как заставить Bokeh 'PointDrawTool' работать с NetworkX Spring_Layout - PullRequest
5 голосов
/ 13 мая 2019

Я работаю над графом сетевого узла, используя NetworkX и Bokeh.Я использую Spring_layout NetworkX, чтобы автоматически генерировать позиции для каждого из моих узлов.Однако я не могу понять, как перетаскивать узлы на моем графике (а также чтобы ребра следовали вместе с перетаскиваемыми узлами).

Как включить перетаскивание узлов для моего графа NetworkX / Bokeh?

Я пытался использовать инструмент PointDrawTool от Bokeh, однако, хотя инструмент отображается и отображается на панели инструментов рядом с моим графиком, он не работает.

plot = Plot(plot_width=1000, plot_height=1000,
            x_range=Range1d(-1.1,1.1), y_range=Range1d(-1.1,1.1))


plot.title.text = "Network Graph"

graph_renderer = from_networkx(G, nx.spring_layout)

plot.add_tools(HoverTool(tooltips=[("ID", "@index"), ("Internal IP", "@Internal")]), PointDrawTool(renderers = [graph_renderer.node_renderer], empty_value = 'black'), TapTool(), BoxSelectTool(), BoxEditTool(), BoxZoomTool(), PanTool(), WheelZoomTool(), ZoomInTool(), ZoomOutTool(), SaveTool(), UndoTool())

graph_renderer.node_renderer.glyph = Circle(size=10, fill_color=Spectral4[0])
graph_renderer.node_renderer.selection_glyph = Circle(size=10, fill_color=Spectral4[2])
graph_renderer.node_renderer.hover_glyph = Circle(size=10, fill_color=Spectral4[1])

graph_renderer.edge_renderer.glyph = MultiLine(line_color="#CCCCCC", line_alpha=0.8, line_width=1)
graph_renderer.edge_renderer.selection_glyph = MultiLine(line_color=Spectral4[2], line_width=3)
graph_renderer.edge_renderer.hover_glyph = MultiLine(line_color=Spectral4[1], line_width=3)

graph_renderer.selection_policy = NodesAndLinkedEdges()
graph_renderer.inspection_policy = NodesAndLinkedEdges()

plot.renderers.append(graph_renderer)

output_file("interactive_graphs.html")
show(plot)

Я ожидаюузлы должны быть перетаскиваемыми.Я хочу щелкнуть узел и перетащить его, чтобы он изменил свою позицию.

14/05/2019 Редактировать: Мой импорт:

import pandas as pd
import numpy as np
import networkx as nx
from bokeh.io import show, output_file
from bokeh.models import Plot, Range1d, MultiLine, Circle, HoverTool, TapTool, BoxEditTool, BoxSelectTool, BoxZoomTool, ResetTool, PanTool, WheelZoomTool, ZoomInTool, ZoomOutTool, SaveTool, UndoTool, PointDrawTool
from bokeh.models.graphs import from_networkx, NodesAndLinkedEdges, EdgesAndLinkedNodes
from bokeh.palettes import Spectral4
import warnings
import matplotlib.pyplot as plt
%matplotlib notebook

from IPython.display import display, HTML
from IPython.core.interactiveshell import InteractiveShell
...