如何用DiagrammeR创建含水平与垂直流向节点的流程图
解决DiagrammeR流程图中指定箭头水平流向的问题
要实现BIKE到WALK的箭头水平显示,核心是利用Graphviz的**节点排名(rank)**属性,让这两个节点处于同一水平层级。修改后的代码如下:
library(DiagrammeR) grViz(diagram = "digraph flowchart { node [fontname = helvetica, fontsize = 9, shape = rounded, penwidth = 1.0] graph[nodesep = 0.5] tab1 [label = '@@1'] tab2 [label = '@@2'] tab3 [label = '@@3'] tab4 [label = '@@4'] tab5 [label = '@@5'] tab6 [label = '@@6'] tab7 [label = '@@7'] tab8 [label = '@@8'] tab1 -> tab3; tab2 -> tab4; tab3 -> tab4; tab4 -> tab5; tab5 -> tab6; tab6 -> tab7; tab7 -> tab8; # 关键:让BIKE和WALK处于同一水平层级 {rank=same; tab7; tab8;} } [1]: 'KNOWN MAKE (N=500000)' [2]: 'MEN (N=400000)' [3]: 'UNKNOWN MAKE (N=12000)' [4]: 'CAR (N=488174)' [5]: 'PLANE (N=462050)' [6]: 'HORSE (N=442247)' [7]: 'BIKE (N=441912)' [8]: 'WALK (N=441343)'")
关键修改说明
- 添加
{rank=same; tab7; tab8;}:这是Graphviz的语法,将指定节点强制放在同一水平排名上,此时节点间的箭头会自动变为水平方向(从左到右,符合默认的rankdir=TB整体布局逻辑)。 - 保持其余节点的垂直流向不变:前面的节点依然遵循从上到下的垂直布局,只有最后两个节点变为水平排列。
如果需要更精细的布局控制,还可以:
- 调整
nodesep值修改节点间水平间距 - 给箭头添加样式属性(比如
tab7 -> tab8 [color=blue]) - 若要让某一整块区域水平排列,可将相关节点包裹在子图中并设置
rankdir=LR
内容的提问来源于stack exchange,提问作者jerry
相关产品推荐
相关产品推荐

