我想画一个图,其边缘代表节点之间的相关系数。每个独特的关系我都有优势。每次我重新运行以下代码时,图形都不同。有没有一种方法可以强制图形的一种形式?另外,不确定这是否能正确生成图形-请帮助解决任何看起来错误的问题。
G = nx.Graph()
G.add_edge('A', 'B', weight=0.511012)
G.add_edge('A', 'C', weight=0.553063)
G.add_edge('A', 'D', weight=0.607859)
G.add_edge('A', 'E', weight=0.601554)
G.add_edge('A', 'F', weight=0.641796)
G.add_edge('B', 'C', weight=0.438743)
G.add_edge('B', 'D', weight=0.463087)
G.add_edge('B', 'E', weight=0.615150)
G.add_edge('B', 'F', weight=0.478853)
G.add_edge('C', 'D', weight=0.553063)
G.add_edge('C', 'E', weight=0.438743)
G.add_edge('C', 'F', weight=0.541893)
G.add_edge('D', 'E', weight=0.535331)
G.add_edge('D', 'F', weight=0.556995)
G.add_edge('E', 'F', weight=0.535446)
nx.draw(G, with_labels=True, node_color='orange', node_size=400, edge_color='black', linewidths=1, font_size=15)
plt.show()
默认nx.draw
用途nx.spring_layout
设置节点的位置。除非将种子送入nx.spring_layout
,否则它将从随机初始条件开始,然后基于将边缘视为弹簧,将节点视为质量的方式使用移动来重新定位节点。由于这种随机的初始条件,位置每次都会不同。
但是,通常我们可能想使用多个绘制命令来绘制节点或边线(例如,如果我们希望某些节点使用一种尺寸或样式,而另一些节点使用另一种尺寸或样式)。为此,nx.draw
接受一个可选参数pos
,该参数是一个字典,其字典为键,节点的值为2元组,给出其(x,y)坐标。Networkx具有使用不同规则分配位置的多个功能,并且如上所述,默认值使用随机初始条件,因此每次都会提供不同的输出。
对于您的情况,您想确保每次运行代码时都将网络分配给相同的位置。因此,您应该为设置位置的命令提供种子。
#code to generate graph G here.
my_pos = nx.spring_layout(G, seed = 100)
nx.draw(G, pos = my_pos, with_labels=True, node_color='orange', node_size=400, edge_color='black', linewidths=1, font_size=15)
plt.show()
可以允许边缘的重物使弹簧布局发挥作用,好像较高的重物是更坚固的弹簧一样。查看spring_layout的文档以获取更多详细信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句