修改networkx图的边时如何保持原有节点位置不变
实现方法
核心逻辑很简单:节点坐标只和计算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) pos = graphviz_layout(T, prog="dot") # 再修改图的边结构 T.remove_edge(3,8) T.add_edge(3,4) T.add_edge(7,8) for line in nx.generate_adjlist(T): print(line) # 绘图时复用之前算好的原始节点坐标 nx.draw(T, pos, node_color="y", edge_color='#909090', node_size=200, with_labels=True) plt.show()
运行后所有节点的位置和原始5层二叉平衡树的可视化结果完全一致,仅展示的连线会按照修改后的边结构渲染。
内容的提问来源于stack exchange,提问作者Simd
相关产品推荐
相关产品推荐

