2010-07-02 6 views
16

On dirait qu'il devrait y avoir une méthode dans networkx pour exporter le format graphique json, mais je ne le vois pas. J'imagine que cela devrait être facile à faire avec nx.to_dict_of_dicts(), mais cela nécessiterait un peu de manipulation. Quelqu'un sait-il d'une solution simple et élégante?Méthode pour enregistrer networkx graph to json graph?

+1

Quel est exactement le format graphique JSON? – fmark

+0

essentiellement une liste de nœuds et adjacences, mais sorta confus avec une version simple et une version étendue: http://thejit.org/static/v20/Docs/files/Loader/Loader-js.html – Bob

Répondre

1

Les nœuds et les bords sont-ils suffisamment d'informations? Si oui, vous pouvez écrire votre propre fonction:.

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

Voici une approche JSON que je viens de faire, en même temps que le code pour lire les résultats de retour dans Il enregistre les attributs de nœud et de bord, dans le cas où vous avez besoin 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

Cette documentation contient une description complète

Un exemple simple est la suivante:

import networkx as nx 
from networkx.readwrite import json_graph 

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

Vous pouvez également jeter un oeil à l'Javascript/SVG/D3 bel exemple sur l'ajout de la physique à la visualisation graphique.

2

En général, j'utiliser le code suivant:

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) 

il va créer le graphique au format JSON dans lequel les noeuds sont en nodes et arêtes dans links en plus d'autres informations sur le graphique (directionnalité, ... etc)

1

Essayez ceci:

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

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