我正在尝试导出带有一些可视化规范的图形文件。我无法弄清楚如何添加多级属性。
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]
我实际上有两个问题:
对于信息:我真正关注的是将网络图导出为gexf文件的方法,我可以使用gexf-js打开该文件而不通过gephi.
P.S:我有this question 和其他相关的内容,但据我所知,他们并没有解决我所追求的问题。
答案 0 :(得分: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')
工作: - )