如何使用networkx绘制根在右侧的从左到右横向树结构?
要实现根节点位于右侧的横向树布局,只需给graphviz_layout方法新增rankdir="RL"参数即可,dot布局程序原生支持该参数控制树的排列方向。
修改后的完整代码如下:
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) # 新增rankdir参数指定布局方向,RL表示从右到左排列,根节点在最右侧 pos = graphviz_layout(T, prog="dot", rankdir="RL") nx.draw(T, pos, node_color="y", edge_color='#909090', node_size=200, with_labels=True) plt.show()
参数补充说明
rankdir支持4种取值,可按需选择:
rankdir="TB":默认值,从上到下排列,根在顶部,即原代码效果rankdir="BT":从下到上排列,根在底部rankdir="LR":从左到右排列,根在左侧rankdir="RL":从右到左排列,根在右侧,符合本次需求
如果你不想依赖graphviz的布局参数,也可以手动转换坐标实现同样效果:
pos = graphviz_layout(T, prog="dot") # 交换x、y坐标并翻转x轴实现右根横向布局 pos = {node: (-y, x) for node, (x, y) in pos.items()}
内容的提问来源于stack exchange,提问作者Simd
相关产品推荐
相关产品推荐

