¿Método para guardar el gráfico de networkx al gráfico de json?

Parece que debería haber un método en networkx para exportar el formato de gráfico json, pero no lo veo. Me imagino que esto debería ser fácil de hacer con nx.to_dict_of_dicts (), pero requeriría un poco de manipulación. ¿Alguien sabe de una solución simple y elegante?

Esta documentación contiene una descripción completa.

Un ejemplo simple es este:

import networkx as nx from networkx.readwrite import json_graph DG = nx.DiGraph() DG.add_edge('a', 'b') print json_graph.dumps(DG) 

También puede echar un vistazo al buen ejemplo de Javascript / SVG / D3 al agregar la física a la visualización de gráficos.

Aquí hay un enfoque JSON que acabo de hacer, junto con el código para volver a leer los resultados. Guarda los atributos de nodo y borde, en caso de que lo necesite.

 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 

Generalmente uso el siguiente código:

 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) 

creará un gráfico con formato json en el que los nodos están en nodes y bordes en los links además de otra información sobre el gráfico (direccionalidad, … etc.)

¿Son los nodos y bordes suficiente información? Si es así, podrías escribir tu propia función:

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

Prueba esto:

 # Save graph nx.write_gml(G, "path_where_graph_should_be_saved.gml") # Read graph G = nx.read_gml('path_to_graph_graph.gml') 

El rest de las soluciones no funcionaron para mí. De la documentación de networkx 2.2 :

 nx.write_gpickle(G, "test.gpickle") G = nx.read_gpickle("test.gpickle")