2

我正在尝试导出带有一些可视化规范的图形文件。我不知道如何添加多级属性。

Import networkx as nx
#Create the Graph 
g = nx.Graph()
g.add_edge('Andre',   'Beverly')
g.add_edge('Andre',   'Diane')
g.add_edge('Andre',   'Carol')
g.add_edge('Andre',   'Fernando')
g.add_edge('Beverly', 'Diane')
nx.draw(g)

向节点添加属性

我想做的是添加位置但使用特定属性(名称和结构)

# compute position 
pos = nx.spring_layout(g)

# add attribute 
g.node["Andre"]["viz"]["position"]["x"]= pos["Andre"][0]
g.node["Andre"]["viz"]["position"]["y"]= pos["Andre"][1]

这不起作用

我实际上有两个问题:

  1. 如何添加多级属性
  2. 有没有办法在迭代中做到这一点(我仍然可以编写一个函数,但我想知道是否有一种我没有见过的从 networkx 做的方法)

对于信息:我真正追求的是一种将网络图导出到 gexf 文件的方法,我可以使用gexf-js打开该文件,而无需通过gephi。

PS:我有这个问题和其他与此相关的问题,但据我所知,他们并没有解决我所追求的问题。

4

1 回答 1

5

计算出 中的位置后spring_layout()

for node in g.nodes():
    g.node[node]["viz"] = {'position': {'x': pos[node][0],
                                        'y': pos[node][1]
                                        }
                           }

print g.nodes(data=True)

结果是:

[('Beverly',
  {'viz': {'position': {'x': 0.00089466691490215525,
     'y': 0.69872879243427066}}}),
 ('Andre',
  {'viz': {'position': {'x': 0.55837798068966304, 'y': 0.47862178288009244}}}),
 ('Carol', {'viz': {'position': {'x': 1.0, 'y': 0.95632397309056527}}}),
 ('Diane', {'viz': {'position': {'x': 0.0, 'y': 0.25644757276893704}}}),
 ('Fernando', {'viz': {'position': {'x': 0.9957995595107102, 'y': 0.0}}})]

然后你就可以nx.write_gexf(g, 'somefile.gexf')开始工作了:-)

于 2013-04-19T21:43:53.583 回答