Méthode pour sauvegarder networkx graph sur JSON graph?

il semble 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 nous aurions besoin d'un peu de manipulation. Quelqu'un connais une solution simple et élégante?

18
demandé sur Bob 2010-07-02 06:21:19

5 réponses

documentation contient une description complète

voici un exemple simple:

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 aussi jeter un oeil à l' Javascript / SVG / D3 bel exemple sur l'ajout de la physique à la visualisation graphique.

15
répondu sw. 2016-11-16 02:59:56

Voici une approche JSON que je viens de faire, avec le code pour lire les résultats. Il enregistre les attributs node et edge, au cas où vous en auriez besoin.

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
7
répondu Abraham Flaxman 2012-03-16 12:54:52

en Général j'utilise 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 un graphique formaté json dans lequel les noeuds sont nodes et arêtes links en plus d'autres informations sur le graphique (directionnalité ... etc)

2
répondu sirus 2014-07-01 01:21:33

Les noeuds et les bords sont-ils assez informatifs? Si oui, vous pouvez écrire votre propre fonction:

json.dumps(dict(nodes=graph.nodes(), edges=graph.edges()))
1
répondu Ryan Ginstrom 2010-07-02 02:44:33

essaye 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')
1
répondu Leonid Dashko 2017-04-11 19:46:29