You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:07:22