对networkx spring_layout的额外力量

时间:2014-07-10 13:06:21

标签: networkx springlayout

我想为networkx spring_layout添加额外的力量。

我有一个直观的图表,我希望节点根据它们的边缘移动到不同的边。具有更多传出边缘的节点应该漂移到具有更多进入边缘的节点应该向右漂移。另一种选择是。这些节点组会相互漂移,具有输出边缘的节点会越来越近,而具有输入边缘的节点也会越来越近。

我设法查看了networkx http://networkx.lanl.gov/archive/networkx-0.37/networkx.drawing.layout-pysrc.html#spring_layout的spring_layout的源代码 但那里的一切都超出了我的理解

G.DiGraph()
G.add_edges_from([(1,5),(2,5),(3,5),(5,6),(5,7)])

布局应该显示边缘1,2,3彼此更接近,6和7相同。

我想,我可以通过使用MultiDiGraph添加不可见边来解决这个问题。我可以计算每个节点的输入和输出边缘,并添加连接两个组的不可见边缘。但是,我非常确定有更好的方法来解决问题。

1 个答案:

答案 0 :(得分:1)

在混合中添加权重将是分组事物(使用那些不可见节点)的好方法。但是布局无法从右边知道左边。要获得所需的确切布局,可以指定每个点的x,y坐标。

import networkx as nx
G=nx.Graph()

G.add_node(1,pos=(1,1))
G.add_node(2,pos=(2,3))
G.add_node(3,pos=(3,4))
G.add_node(4,pos=(4,5))
G.add_node(5,pos=(5,6))
G.add_node(6,pos=(6,7))
G.add_node(7,pos=(7,9))

G.add_edges_from([(1,5),(2,5),(3,5),(5,6),(5,7)])

pos=nx.get_node_attributes(G,'pos')
nx.draw(G,pos)