问题描述
我想代表一个计算机网络。设备具有多个连接到另一个设备端口的端口。例如,在这里您看到设备1/1/1
的端口a
连接到设备1/1/1
的端口b
。到目前为止,一切都很好...
现在我想将节点的端口(实际关闭)粘在一起(以使节点与其端口之间的距离为零)。但是端口之间的距离应该是宽松的。请记住,我的网络中的ports
和nodes
在networkx抽象中都表示为nodes
...
到目前为止,我已经通过控制边缘的权重(通过将节点及其端口链接在一起)并分配较高的值来实现这一目标。
G.add_edge(node,node_port[0],w=2000)
我以后可以使用pos = nx.spring_layout(G,weight='w')
读取该值。但是无论w
有多大,我都无法达到节点和端口之间的零距离。
有什么想法吗?谢谢!
解决方法
运行时:
pos = nx.spring_layout(G,weight='w')
您将获得一个字典,其中的键是节点,值是2D坐标。您可以使用它来创建一个新的词典,如果我对您的理解正确的话,可以在其中手动用其设备的端口位置覆盖端口位置。
特别是:
- 初始化新字典
pos2
。 - 在节点上循环:如果节点是设备,则在
pos
中查找其坐标并将其添加到pos2
。如果该节点是端口,请在pos
中查找其相应设备的坐标,然后使用这些坐标将端口节点添加到pos2
。
然后调用nx.draw
,将pos2
作为节点的位置。希望这很清楚,我希望您能正确理解。