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

DiagrammeR流程图节点水平对齐问题求助(附R可复现代码)

R语言流程图代码修改方案

修改后的完整代码

library(DiagrammeR)
library(DiagrammeRsvg)
library(magrittr)
library(rsvg)
library(tidyverse)

flowchart = grViz("digraph flowchart {
                  
  graph [rankdir = LR, nodesep=0.5, ranksep=0.8]

  subgraph cluster_one {
  peripheries=1

  label = 'Procedure 1';
  style = solid;
  fontname = 'helvetica-bold';
  
  node [fontname = Helvetica, shape = circle,  style=solid]
  R1 [label = '1']; R2 [label = '2']; R3 [label = '3']; R4 [label = '4']
  
  node [fontname = Helvetica, shape = rectangle, style=filled] 
  A1 [label = 'A1']
  node [fontname = Helvetica, shape = rectangle, style=filled] 
  A2 [label = 'A2']
  node [fontname = Helvetica, shape = rectangle, style=filled] 
  B1 [label = 'B1'] 
  node [fontname = Helvetica, shape = rectangle, style=filled]
  B2 [label = 'B2']
  node [fontname = Helvetica, shape = rectangle, style=filled] 
  C1 [label = 'C1']
  node [fontname = Helvetica, shape = rectangle, style=filled] 
  C2 [label = 'C2']
  node [fontname = Helvetica, shape = rectangle, style=filled] 
  D1 [label = 'D1']
  node [fontname = Helvetica, shape = rectangle, style=filled] 
  D2 [label = 'D2']
  
  # 让节点3、4处于对应矩形节点正中间
  {rank=same; R1; A1; A2;}
  {rank=same; R2; B1; B2;}
  {rank=same; R3; C1; C2;}
  {rank=same; R4; D1; D2;}
  
  # 节点间无箭头连接
  edge[len = 0.01, arrowhead = none];
  R1 -> {A1 A2}; R2 -> {B1 B2};
  R3 -> {C1 C2}; R4 -> {D1 D2};
  
  node [fontname = Helvetica, shape = diamond, style=solid]
  IA1 [label = 'Y']; IA2 [label = 'Y'];
  node [fontname = Helvetica, shape = diamond, style=dashed]
  IA3 [label = 'N']; IA5 [label = 'N'];
  node [fontname = Helvetica, shape = oval, style=dashed]
  IA4 [label = 'N'];
  node [fontname = Helvetica, shape = oval, style=filled]
  Final [label = 'GO']
  
  # 让A1、C2与对应Y节点水平对齐
  {rank=same; A1; IA1;}
  {rank=same; C2; IA2;}
  }

  subgraph cluster_two {
  peripheries=1

  label = 'Procedure 2';
  style = solid;
  fontname = 'helvetica-bold';
  
  node [fontname = Helvetica, shape = rectangle, style=filled]
  A1_Y [label = 'A1']
  node [fontname = Helvetica, shape = rectangle, style=filled]
  C2_Y [label = 'C2']
  
  # 保证跨子图箭头水平对齐
  {rank=same; IA1; A1_Y;}
  {rank=same; IA2; C2_Y;}
  
  edge[len = 0.01, arrowhead = vee, label = ''];
  IA1 -> A1_Y; 
  IA2 -> C2_Y;
  
  edge[style='invisible', dir='none'];
  A2 -> IA3; 
  {B1 B2} -> IA4; C1 -> IA5; {D1 D2} -> Final;
  }
}
             ")
flowchart

调整细节说明

  • 节点3、4居中:给每组圆形节点和对应矩形节点添加rank=same约束,比如{rank=same; R3; C1; C2;},强制它们处于同一水平层级,Graphviz会自动将圆形节点放置在两个矩形节点的正中间,和R1、R2的布局保持一致。
  • A1、C2与Y节点对齐:给A1和IA1、C2和IA2分别设置rank=same,确保它们在同一水平线上,实现精准对齐。
  • 跨子图箭头水平:在第二个子图中,给IA1和A1_Y、IA2和C2_Y添加rank=same约束,让跨子图的节点处于同一水平层级,连接箭头会自动变为水平方向,保证"A1-Y-A1"、"C2-Y-C2"的水平线布局。

内容的提问来源于stack exchange,提问作者alittleboy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:27:10