具有不同边缘值的 Networkx Spring 布局

sla*_*law 3 python graph networkx

我是 Networkx 的新手,并试图弄清楚如何使用 spring 布局,但在节点之间应用不同的边缘值(即,节点之间的不同距离)而不是相同的边缘值。

本质上,我想要一个图,它试图维护一组预定义的节点-节点距离(可能使用弹簧布局来找到一些局部最小值),其中某些边的权重高于其他边。但是,Networkx 文档表明所有边都将具有相同的权重。

此外,在绘制 spring_layout 图的一个简单案例中,我注意到每次运行时生成的图都会改变构象。有没有办法恢复相同的图形(即设置一些随机种子)?

import networkx as nx
G = nx.path_graph(5)
nx.draw(G) 
Run Code Online (Sandbox Code Playgroud)

Joe*_*oel 5

你可以完成你所追求的(几乎)。

1) 您可以预先定义一些会影响节点距离的权重。(但不能直接指定距离)

2) 您可以将初始位置输入 spring_layout 算法,这将导致最终输出一致。(如果需要,您甚至可以指定某些不允许更改位置的节点)。或者,您可以nx.spring_layout使用可选参数将种子分配给使用的随机数生成器seed

import networkx as nx

G = nx.Graph()
G.add_edges_from([(1,2, {'myweight':20}), (2,3,{'myweight':0.1}), 
                  (1,4,{'myweight':1}), (2,4,{'myweight':50})])
initialpos = {1:(0,0), 2:(0,3), 3:(0,-1), 4:(5,5)}
pos = nx.spring_layout(G,weight='myweight', pos = initialpos)

nx.draw_networkx(G,pos)

import pylab as plt
plt.savefig('test.png')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

文档可在此处获得。源代码可以在这里找到。

如果您想摆脱轴,请查看 nx.draw。

请注意,除了我所做的之外,还有其他方法可以添加加权边。