如何调整DiagrammeR流程图节点位置以实现T型分支布局?
求助:调整DiagrammeR流程图节点位置实现T型结构
需要调整DiagrammeR流程图的节点位置,具体需求:
- 在流程图第三层,实现节点4到5、4到6的水平拆分
- 实现节点7到8、7到9的水平拆分
- 让节点2和3延伸出的结构呈两个T型
附上当前实现代码及效果截图:
library(DiagrammeR) grViz("digraph flowchart { node [fontname = Arial, shape = circular, fontsize=11] tab1 [label = '@@1'] tab2 [label = '@@2'] tab3 [label = '@@3'] tab4 [label = '@@4'] tab5 [label = '@@5'] tab6 [label = '@@6'] tab7 [label = '@@7'] tab8 [label = '@@8'] tab9 [label = '@@9'] # edge definitions with the node IDs tab1 -> tab2 tab1 -> tab3 tab2 -> tab4 tab4 -> tab5 tab4 -> tab6 tab3 -> tab7 tab7 -> tab8 tab7 -> tab9 ; } [1]: '1' [2]: '2' [3]: '3' [4]: '4' [5]: '5' [6]: '6' [7]: '7' [8]: '8' [9]: '9' ")
当前流程图效果:
补充参考截图:
解决方案
通过Graphviz的rank=same属性强制指定节点处于同一水平层级,同时设置正交边让布局更规整,修改后的代码如下:
library(DiagrammeR) grViz("digraph flowchart { graph [rankdir=TB, splines=ortho, nodesep=0.5] # 垂直布局+直角边+节点间距 node [fontname = Arial, shape = circular, fontsize=11] tab1 [label = '@@1'] tab2 [label = '@@2'] tab3 [label = '@@3'] tab4 [label = '@@4'] tab5 [label = '@@5'] tab6 [label = '@@6'] tab7 [label = '@@7'] tab8 [label = '@@8'] tab9 [label = '@@9'] # 强制同一水平层级的节点 {rank=same; tab5; tab6} {rank=same; tab8; tab9} # 边定义 tab1 -> tab2 tab1 -> tab3 tab2 -> tab4 tab4 -> tab5 tab4 -> tab6 tab3 -> tab7 tab7 -> tab8 tab7 -> tab9 ; } [1]: '1' [2]: '2' [3]: '3' [4]: '4' [5]: '5' [6]: '6' [7]: '7' [8]: '8' [9]: '9' ")
说明:
{rank=same; tab5; tab6}和{rank=same; tab8; tab9}确保每组节点处于同一水平位置,形成T型的横向部分splines=ortho让边呈现直角,使T型结构更清晰nodesep=0.5可调整节点间的水平间距,根据需求自行修改数值
内容的提问来源于stack exchange,提问作者EB3112
相关产品推荐
相关产品推荐

