改变边时如何保持节点位置
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()
给予
考虑以下带有三个注释行的 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()
给予