0

我想为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 添加不可见的边缘来解决这个问题。我可以计算每个节点的传入和传出边,并添加连接两组的不可见边。但是,我很确定有更好的方法来解决这个问题。

4

1 回答 1

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)
于 2014-07-15T11:32:52.330 回答