似乎在networkx中应该有一个方法来导出json图形格式,但我没有看到它。我想这应该很容易用nx.to_dict_of_dicts(),但需要一些操作。有人知道一个简单而优雅的解决方案吗?
答案 0 :(得分:17)
此documentation包含完整说明
一个简单的例子是:
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好示例。
答案 1 :(得分:7)
这是我刚才做的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
答案 2 :(得分:4)
通常我使用以下代码:
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
除了关于图表的其他信息(方向性,......等)
答案 3 :(得分:1)
节点和边缘是否有足够的信息?如果是这样,你可以编写自己的函数:
json.dumps(dict(nodes=graph.nodes(), edges=graph.edges()))
答案 4 :(得分:1)
试试这个:
# Save graph
nx.write_gml(G, "path_where_graph_should_be_saved.gml")
# Read graph
G = nx.read_gml('path_to_graph_graph.gml')
答案 5 :(得分:0)
其余解决方案对我不起作用。来自networkx 2.2
documentation:
nx.write_gpickle(G, "test.gpickle")
G = nx.read_gpickle("test.gpickle")