改变边时如何保持节点位置

How to keep node positions when changing edges

考虑以下带有三个注释行的 MWE:

import matplotlib.pyplot as plt
import networkx as nx
import pydot
from networkx.drawing.nx_pydot import graphviz_layout

T = nx.balanced_tree(2, 5)
# T.remove_edge(3,8)
# T.add_edge(3,4)
# T.add_edge(7,8)
for line in nx.generate_adjlist(T):
    print(line)
pos = graphviz_layout(T, prog="dot")
nx.draw(T, pos, node_color="y", edge_color='#909090', node_size=200, with_labels=True)

plt.show()

这会产生:

我希望能够取消对这些行的注释,但让所有节点都保持在与上面相同的位置。只是边缘应该改变。你怎么做到的?

pos 只是一个字典,将节点映射到它们的位置。只要你不添加任何额外的节点,你可以删除任何节点或编辑任何边缘 after 计算位置并仍然使用相同的 pos 字典。

基本上,只需重新排序您的代码:

import matplotlib.pyplot as plt
import networkx as nx
import pydot
from networkx.drawing.nx_pydot import graphviz_layout

T = nx.balanced_tree(2, 5)

for line in nx.generate_adjlist(T):
    print(line)
pos = graphviz_layout(T, prog="dot")

T.remove_edge(3,8) # moved this line
T.add_edge(3,4) # moved this line
T.add_edge(7,8) # moved this line

nx.draw(T, pos, node_color="y", edge_color='#909090', node_size=200, with_labels=True)

plt.show()

给予