如何将networkx图保存为json格式?

32 投票
7 回答
32013 浏览
提问于 2025-04-16 00:43

看起来在networkx里应该有个方法可以把图导出成json格式,但我没找到。我想用nx.to_dict_of_dicts()应该可以做到,但需要稍微处理一下。有没有人知道简单又优雅的解决办法?

7 个回答

8

这是我刚刚做的一个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
12

通常我使用以下代码:

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 里,另外还包含一些关于这个图的其他信息,比如方向性等等。

21

这段文档里有详细的说明。

这里有一个简单的例子:

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的示例,它展示了如何给图形可视化添加物理效果。

撰写回答