从NetworkX

时间:2016-11-23 00:20:26

标签: python json networkx

我有一个使用networkx制作的json对象:

json_data = json_graph.node_link_data(network_object)

它的结构如下(我的输出的迷你版本):

>>> json_data

{'directed': False,
 'graph': {'name': 'compose( ,  )'},
 'links': [{'source': 0, 'target': 7, 'weight': 1},
  {'source': 0, 'target': 2, 'weight': 1},
  {'source': 0, 'target': 12, 'weight': 1},
  {'source': 0, 'target': 9, 'weight': 1},
  {'source': 2, 'target': 18, 'weight': 25},
  {'source': 17, 'target': 25, 'weight': 1},
  {'source': 29, 'target': 18, 'weight': 1},
  {'source': 30, 'target': 18, 'weight': 1}],
 'multigraph': False,
 'nodes': [{'bipartite': 1, 'id': 'Icarus', 'node_type': 'Journal'},
  {'bipartite': 1,
   'id': 'A Giant Step: from Milli- to Micro-arcsecond Astrometry',
   'node_type': 'Journal'},
  {'bipartite': 1,
   'id': 'The Astrophysical Journal Supplement Series',
   'node_type': 'Journal'},
  {'bipartite': 1,
   'id': 'Astronomy and Astrophysics Supplement Series',
   'node_type': 'Journal'},
  {'bipartite': 1, 'id': 'Astronomy and Astrophysics', 'node_type': 'Journal'},
  {'bipartite': 1,
   'id': 'Astronomy and Astrophysics Review',
   'node_type': 'Journal'}]}

我想要做的是将以下元素添加到每个节点,以便我可以将此数据用作sigma.js的输入:

“x”:0,
“y”:0,
“尺寸”:3
“中心性”:0

尽管使用add_node(),我似乎无法找到有效的方法。是否有一些明显的方法可以添加我缺少的东西?

1 个答案:

答案 0 :(得分:2)

虽然您将数据作为networkx图表,但您可以使用node_link_data方法将属性(例如存储在python词典中)添加到图表中的所有节点。

在我的示例中,新属性存储在字典attr中:

import networkx as nx
from networkx.readwrite import json_graph

# example graph
G = nx.Graph()
G.add_nodes_from(["a", "b", "c", "d"])

# your data
#G = json_graph.node_link_graph(json_data)

# dictionary of new attributes
attr = {"x": 0,
        "y": 0,
        "size": 3,
        "centrality": 0}

for name, value in attr.items():
    nx.set_node_attributes(G, name, value)

# check new node attributes
print(G.nodes(data=True))

然后,您可以使用{{3}}以JSON格式导出新图表。