2010-07-02 10 views
16

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?Método para guardar el gráfico de redx en el gráfico json?

+1

¿qué es exactamente el formato gráfico JSON? – fmark

+0

básicamente una lista de nodos y adyacencias, pero es bastante confuso con una versión simple y una extendida: http://thejit.org/static/v20/Docs/files/Loader/Loader-js.html – Bob

Respuesta

1

¿Los nodos y los bordes son información suficiente? Si es así, usted podría escribir su propia función:.

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

Aquí es un enfoque JSON que acabo de hacer, junto con el código para leer los resultados de vuelta en Guarda los atributos del nodo y del borde, en caso de tener que .

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

Este documentation contiene una descripción completa

Un ejemplo simple es la siguiente:

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 a la Javascript/SVG/D3 buen ejemplo en la adición de la física a la visualización gráfica.

2

Yo 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á JSON formato gráfico en el que los nodos están en nodes y bordes en links además de otra información sobre el gráfico (direccionalidad, ... etc)

1

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') 
Cuestiones relacionadas