如何调整DiagrammeR流程图间距实现多排除项垂直排列
你可以通过拆分Box2到Box3之间的隐藏中间节点,让每个排除项对应一个中间节点的方式实现需求,完整可运行代码如下:
library(DiagrammeR) grViz("digraph flowchart { # 全局参数:调整纵向节点间距,可根据排版需求修改 graph [ranksep = 0.3] # 业务节点定义 node [fontname = Helvetica, shape = rectangle, fixedsize = false, width = 1] 1 [label = 'Box 1'] 2 [label = 'Box 2'] 3 [label = 'Box 3'] m1 [label = 'm1'] m2 [label = 'm2'] m3 [label = 'm3'] m4 [label = 'm4'] m5 [label = 'm5'] m6 [label = 'm6'] m7 [label = 'm7'] m8 [label = 'm8'] # 隐藏路径节点定义 node [shape=none, width=0, height=0, label=''] p1 # Box2到Box3之间拆分7个隐藏节点,对应7个待排列的排除项 p2_1 p2_2 p2_3 p2_4 p2_5 p2_6 p2_7 # 主流程路径设置 1 -> p1 [dir=none] p1 -> 2 2 -> p2_1 [dir=none] p2_1 -> p2_2 -> p2_3 -> p2_4 -> p2_5 -> p2_6 -> p2_7 [dir=none] p2_7 -> 3 # 排除分支绑定:每个隐藏节点和对应排除项设为同层级,实现横向对齐 {rank=same; p1 -> m1} {rank=same; p2_1 -> m2} {rank=same; p2_2 -> m3} {rank=same; p2_3 -> m4} {rank=same; p2_4 -> m5} {rank=same; p2_5 -> m6} {rank=same; p2_6 -> m7} {rank=same; p2_7 -> m8} }")
改动说明
- 原代码所有排除项都绑定到同一个隐藏节点p2,同一层级下的多个节点默认会横向排列,因此出现了所有排除项堆在同一行的问题。
- 现在将Box2到Box3之间的单个隐藏节点拆分为与排除项数量一致的多个连续隐藏节点,每个隐藏节点分别和对应的m类排除项设置为同一层级,Graphviz会自动将同层级节点横向对齐,不同层级节点纵向排列,自然实现了排除项垂直排布的效果。
- 全局参数
ranksep用于调整纵向节点的间距,你可以根据自己的排版需求调整数值大小。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

