2010-07-02 2 views
16

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

+1

Что такое формат граф JSON? – fmark

+0

в основном список узлов и смежности, но sorta путают с простой и расширенной версией: http://thejit.org/static/v20/Docs/files/Loader/Loader-js.html – Bob

ответ

1

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

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

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

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 
14

Этот 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

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

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 в дополнение к другой информации о графике (..., направленность и т.д.)

1

Попробуйте это:

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

# Read graph 
G = nx.read_gml('path_to_graph_graph.gml') 
Смежные вопросы