【问题标题】:Fixed/loose distance between nodes with networkx具有networkx的节点之间的固定/松散距离
【发布时间】:2020-12-21 19:11:25
【问题描述】:

我想代表一个计算机网络。设备有几个端口连接到另一个设备的端口。例如,在这里您可以看到设备a 的端口1/1/1 连接到设备b 的端口1/1/1。到目前为止,一切都很好......

现在我想将(真正接近的)端口与节点粘在一起,以便节点与其端口之间的距离为零。但是端口到端口之间的距离应该是宽松的。请记住,我的网络中的 portsnodes 在 networkx 抽象中都表示为 nodes ...

到目前为止,我已经通过控制边的权重来实现这一点,当将节点及其端口链接在一起时,通过分配一个高值。

G.add_edge(node,node_port[0], w=2000)

稍后我可以使用pos = nx.spring_layout(G, weight='w') 读取该值。但是无论w 有多大,我都无法实现节点和端口之间的零距离。

有什么想法吗?谢谢!

【问题讨论】:

  • 您的第二段令人困惑,您能澄清一下吗?我不熟悉端口的格式 1/1/1
  • 只是端口名称的标签。在网络中端口被标识为a/b/c 是很常见的。所以我要说的是,例如,节点b 有3 个端口:1/1/11/1/21/1/3
  • spring_layout 确实可以选择在其计算中包含边权重。这是文档:networkx.github.io/documentation/stable/reference/generated/…

标签: python-3.x networkx topology


【解决方案1】:

当你运行时:

pos = nx.spring_layout(G, weight='w')

你会得到一个字典,其中键是节点,值是二维坐标。如果我理解正确,您可以使用它来创建一个新字典,您可以在其中手动用他们设备的端口位置覆盖端口位置。

具体来说:

  1. 初始化新字典pos2
  2. 遍历节点:如果节点是设备,则在pos 中查找其坐标并将其添加到pos2。如果节点是端口,则在pos 中查找其对应设备的坐标,并使用这些坐标将端口节点添加到pos2

然后调用nx.draw,传递pos2 作为节点的位置。希望这很清楚,并且我对您的解释是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    相关资源
    最近更新 更多