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)
你可以完成你所追求的(几乎)。
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。
请注意,除了我所做的之外,还有其他方法可以添加加权边。
| 归档时间: |
|
| 查看次数: |
9740 次 |
| 最近记录: |