Graphviz/DOT流程图节点对齐与箭头合并问题求助
解决方案
修改后的DOT代码
digraph { compound=true; rankdir=TB; request [ label = "Request"; shape = rect; ]; { rank=same; successful [ label = "Successful?"; shape = diamond; ]; done [ label = "Done"; shape = oval; ]; } // 为需要垂直对齐的节点设置同组属性 condition_1 [ label = "Condition 1"; shape = diamond; group = conditions; ]; condition_2 [ label = "Condition 2"; shape = diamond; group = conditions; ]; condition_3 [ label = "Condition 3"; shape = diamond; group = conditions; ]; condition_n [ label = "Condition N"; shape = diamond; group = conditions; ]; fail [ label = "Fail"; shape = oval; group = conditions; ]; do_some_thing [ label = "Do some thing"; shape = oval; ]; // 新增不可见节点用于合并箭头 dummy [shape=point, style=invis]; // 流程边定义 request -> successful; done -> successful [label="Yes"; dir=back]; successful -> condition_1; condition_1 -> condition_2; condition_2 -> condition_3; condition_3 -> condition_n; condition_n -> fail [label="No"]; // 合并"Yes"分支箭头 condition_1 -> dummy [label="Yes"]; condition_2 -> dummy; condition_3 -> dummy; condition_n -> dummy; dummy -> do_some_thing; }
关键修改说明
- 垂直对齐实现:给
condition_1到condition_n、fail节点添加group = conditions属性,DOT会自动将同组节点排列在同一竖列,实现垂直对齐。 - 箭头合并实现:新增不可见点节点
dummy,让所有条件节点的"Yes"分支先指向该节点,再由它统一指向do_some_thing,将分散的箭头合并为单条。 - 保留原有的
rank=same设置保证successful和done水平对齐,通过链状连接维持流程的垂直走向。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

