Как построить график networkx с holoviews / bokeh с одинаковым расположением узлов и ребер? - PullRequest
0 голосов
/ 20 мая 2018

Я хочу построить график, созданный с помощью networkx, используя holoview и bokeh.Networkx выполняет оптимизацию графика, кажется, как часть рисунка.Когда я передаю график в holoviews, график выглядит совсем по-другому.Я не уверен, что происходит.Я думаю, веса ребер не переданы должным образом, или оптимизация не проводится.(Код для ноутбука Jupyter).

%pylab inline

import pandas as pd
import networkx as nx
import holoviews as hv

hv.extension('bokeh')
np.random.seed(111)
G=nx.Graph()
ndxs = [1,2,3,4]
G.add_nodes_from(ndxs)
G.add_weighted_edges_from([(1,2,0), (1,3,1), 
                           (1,4,-1), (2,4,1),
                           (2,3,-1), (3,4,10)])
nx.draw(G)
# or you set the random_state for the spring layout
# to make sure the figure is reproducible
nx.draw(G, nx.spring_layout(G, random_state=100))

asdf

hv.extension('bokeh')
%opts Graph [width=400 height=400]
padding = dict(x=(-1.1, 1.1), y=(-1.1, 1.1))
hv.Graph.from_networkx(G, nx.layout.circular_layout).redim.range(**padding)

enter image description here

КакМожно ли сохранить расположение узлов при построении с помощью holoviews / bokeh?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Вы можете сохранить только позиции как переменные, а затем использовать их как для nx, так и для hv.Например:

position = nx.spring_layout(G, scale=2)
nx.draw(G,position)
hv.extension('bokeh')
%opts Graph [width=400 height=400]
padding = dict(x=(-1.1, 1.1), y=(-1.1, 1.1))
hv.Graph.from_networkx(G, position).redim.range(**padding)

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

0 голосов
/ 20 мая 2018

В приведенном выше примере используется nx.circular_layout, если это значение меняется на nx.spring_layout, выполняется та же оптимизация и графики выглядят аналогично.Я не знаю, как установить random_state, хотя.

enter image description here

...