Подтвердить что ты не робот

Способ сохранения диаграммы networkx в json-графе?

Кажется, должен быть метод в networkx для экспорта формата json graph, но я его не вижу. Я предполагаю, что это должно быть легко сделать с nx.to_dict_of_dicts(), но для этого потребуется немного манипуляции. Кто-нибудь знает о простом и элегантном решении?

4b9b3361

Ответ 1

Этот documentation содержит полное описание

Простой пример:

import networkx as nx
from networkx.readwrite import json_graph

DG = nx.DiGraph()
DG.add_edge('a', 'b')
print json_graph.dumps(DG)

Вы также можете взглянуть на Javascript/SVG/D3 хороший пример добавления физики к визуализации графа.

Ответ 2

Вот подход JSON, который я только что сделал, вместе с кодом для чтения результатов. Он сохраняет атрибуты node и edge, если вам это нужно.

import simplejson as json
import networkx as nx
G = nx.DiGraph()
# add nodes, edges, etc to G ...

def save(G, fname):
    json.dump(dict(nodes=[[n, G.node[n]] for n in G.nodes()],
                   edges=[[u, v, G.edge[u][v]] for u,v in G.edges()]),
              open(fname, 'w'), indent=2)

def load(fname):
    G = nx.DiGraph()
    d = json.load(open(fname))
    G.add_nodes_from(d['nodes'])
    G.add_edges_from(d['edges'])
    return G

Ответ 3

Обычно я использую следующий код:

import networkx as nx; 
from networkx.readwrite import json_graph;
G = nx.Graph();
G.add_node(...)
G.add_edge(...)
....
json_graph.node_link_data(G)

он создаст json-форматированный график, в котором узлы находятся в nodes, а ребра в links в дополнение к другой информации о графике (направленность,... и т.д.)

Ответ 4

Являются ли узлы и ребра достаточной информацией? Если это так, вы можете написать свою собственную функцию:

json.dumps(dict(nodes=graph.nodes(), edges=graph.edges()))

Ответ 5

Попробуйте следующее:

# Save graph
nx.write_gml(G, "path_where_graph_should_be_saved.gml")

# Read graph
G = nx.read_gml('path_to_graph_graph.gml')