为什么Networkx每次运行时都会重新绘制不同的图表? [英] Why does networkx redraw my graph different each run?

查看:20
本文介绍了为什么Networkx每次运行时都会重新绘制不同的图表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想画一个图,图中的边表示节点之间的相关系数。对于每一段独特的关系,我都有自己的优势。每次我重新运行以下代码时,图形都不同。有没有办法强迫图表的一种形式?此外,甚至不确定这是否正确地生成了图表-请帮助解决任何看起来不正确的问题。

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,它是一个字典,其键是节点,其值是给出它们(x,y)坐标的2元组。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()
可以允许边的权重使弹簧布局的作用就像较高的权重是较强的弹簧一样。有关更多详细信息,请查看documentation of spring_layout

这篇关于为什么Networkx每次运行时都会重新绘制不同的图表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆