将networkx图保存到json图的方法?

Bob*_*Bob 20 python json graph networkx

似乎在networkx中应该有一个方法来导出json图形格式,但我没有看到它.我想这应该很容易用nx.to_dict_of_dicts(),但需要一些操作.有人知道一个简单而优雅的解决方案吗?

sw.*_*sw. 17

文档包含完整说明

一个简单的例子是这样的:

import networkx as nx
from networkx.readwrite import json_graph

DG = nx.DiGraph()
DG.add_edge('a', 'b')
print json_graph.dumps(DG)
Run Code Online (Sandbox Code Playgroud)

您还可以查看Javascript/SVG/D3关于向图形可视化添加物理的好例子.

  • AttributeError:模块“networkx.readwrite.json_graph”没有属性“dumps” (8认同)
  • 添加物理示例的链接已损坏。 (2认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不再起作用了。特别是,“DiGraph”对象没有“edge”属性。 (2认同)

sir*_*rus 6

通常我使用以下代码:

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)
Run Code Online (Sandbox Code Playgroud)

除了有关该图的其他信息(方向性,...等)之外,它将创建json格式的图,其中节点位于节点nodes和边中links


Rya*_*rom 0

节点和边的信息是否足够?如果是这样,您可以编写自己的函数:

json.dumps(dict(nodes=graph.nodes(), edges=graph.edges()))
Run Code Online (Sandbox Code Playgroud)