【问题标题】:Method to save networkx graph to json graph?将networkx图保存到json图的方法?
【发布时间】:2010-07-02 02:21:19
【问题描述】:

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

【问题讨论】:

标签: python json graph networkx


【解决方案1】:

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 很好的示例,将物理添加到图形可视化中。

【讨论】:

  • AttributeError: 模块 'networkx.readwrite.json_graph' 没有属性 'dumps'
  • 添加物理示例的链接已损坏。
【解决方案2】:

这是我刚刚使用的 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

【讨论】:

  • 这似乎不再起作用了。特别是,“有向图”对象没有属性“边”。
【解决方案3】:

一般我使用以下代码:

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 中 除了关于图形的其他信息(方向性,...等)

【讨论】:

    【解决方案4】:

    试试这个:

    # 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】:

      其余的解决方案对我不起作用。来自networkx 2.2documentation

      nx.write_gpickle(G, "test.gpickle")
      G = nx.read_gpickle("test.gpickle")
      

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-24
          • 1970-01-01
          • 2014-05-03
          • 2018-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多