Как установить random_state в графе networkx с holoviews/bokeh?

Я хотел бы генерировать воспроизводимые графики. С помощью networkx можно передать макету случайное состояние. Это необходимо для того, чтобы сюжет был одинаковым. Делая то же самое с holoviews, я получаю сообщение об ошибке.

%pylab inline

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

# generating the graph
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)]) 

# drawing with networkx
nx.draw(G, nx.spring_layout(G, random_state=100))


# drawing with holoviews/bokeh
hv.extension('bokeh')
%opts Graph [width=400 height=400]
layout = nx.layout.spring_layout(G, random_state=100)
hv.Graph.from_networkx(G, layout)
>>> TypeError: 'dict' object is not callable

person Sören    schedule 22.05.2018    source источник


Ответы (1)


Первая проблема заключается в том, что метод Graph.from_networkx принимает функцию макета, а не словарь, который выводится этой функцией. Если вы хотите передать аргументы функции, вы можете сделать это как аргумент ключевого слова, например:

hv.Graph.from_networkx(G, nx.layout.spring_layout, random_state=42)

В моей версии networkx random_state не является принятым аргументом для функций макета, и в этом случае вы можете установить начальное значение непосредственно с помощью NumPy:

np.random.seed(42)
hv.Graph.from_networkx(G, nx.layout.spring_layout)
person philippjfr    schedule 24.05.2018