【问题标题】:Adding multi-level attributes to nodes using NetworkX使用 NetworkX 向节点添加多级属性
【发布时间】:2013-04-12 18:51:47
【问题描述】:

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

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.

P.S:我有 this question 和其他与此相关的信息,但据我所知,它们并没有解决我所追求的问题。

【问题讨论】:

    标签: python networkx gephi


    【解决方案1】:

    计算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') 工作:-)

    【讨论】:

    • 太棒了!这就是我所需要的。非常感谢。不幸的是,一个简单的 write_gexf 不起作用,因为 networkx 使用另一个命名空间 stackoverflow.com/questions/14700273。我将编写自己的函数来编写带有 viz 属性的 gexf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 2011-04-28
    相关资源
    最近更新 更多