如何创建具有直顶层路径和分组子路径的图形
how to create a graph with a straight top-level path and grouped sub-paths
我有一个通用的数据流结构,它主要由顶层决策堆栈组成。每个决定都会引导您在堆栈中上下移动,直到堆栈中间发生终止事件,或者直到到达堆栈的顶部或底部。一些决策涉及检查布尔条件以确定做出哪些决策。我正在寻找一些帮助来使输出更清楚地捕捉思维过程,这似乎主要是分组/排名方面的问题,但也可能是其他问题。
我第一遍的 graphviz 代码如下所示,用 dot
渲染后得到下图:
虽然这是我正在制作的决策堆栈的准确图表,但我希望它看起来更像这样:
这是 graphviz 代码:
graph decision_path {
node [shape="rectangle"]
edge [dir="both"]
newrank=true
Top
d1 [label="Decision 1"]
cd1 [label="Composite Decision 1"]
cd2 [label="Composite Decision 2"]
d2 [label="Decision 2"]
d3 [label="Decision 3"]
d4 [label="Decision 4"]
source [label="Decision Source" style="filled" color="#EEFFEE"]
Top -- d1 [dir="back"]
d1 -- cd1
cd1 -- cd2
cd2 -- d2
d2 -- d3
d3 -- d4
d4 -- Bottom [dir="forward"]
cd1 -- source [dir="back"]
subgraph {
node [style=filled, color="#EEEEFF"]
cd1_d1 [label="Kill"]
cd1_d2 [label="Continue"]
cd1_d1 -- cd1_d2 [dir="forward"]
subgraph {
rank=same
node [style=filled color="#FFEEEE"]
cd1_d1_c1 [label="Conditional 1"]
cd1_d1 -- cd1_d1_c1 [dir="forward"]
}
}
cd1 -- cd1_d1 [dir="forward"]
subgraph {
node [style=filled, color="#EEEEFF"]
cd2_d1 [label="Continue"]
cd2_d2 [label="Kill"]
cd2_d1 -- cd2_d2 [dir="forward"]
subgraph {
rank=same
node [style=filled color="#FFEEEE"]
cd2_d1_c1 [label="Conditional 1"]
cd2_d1_c2 [label="Conditional 2"]
cd2_d1 -- cd2_d1_c1 [dir="forward"]
cd2_d1_c1 -- cd2_d1_c2 [dir="forward"]
}
}
cd2 -- cd2_d1 [dir="forward"]
}
将 rankdir 更改为 LR - 可能没有必要,但似乎工作得很好。
graph decision_path {
rankdir=LR
node [shape="rectangle"]
edge [dir="both"]
newrank=true
nodesep=.6
{ rank=same
Top
d1 [label="Decision 1"]
cd1 [label="Composite Decision 1"]
cd2 [label="Composite Decision 2" group=cd2g]
d2 [label="Decision 2"]
d3 [label="Decision 3"]
d4 [label="Decision 4"]
Bottom
}
source [label="Decision Source" style="filled" color="#EEFFEE"]
Top -- d1 [dir="back"]
d1 -- cd1
cd1 -- cd2
cd2 -- d2
d2 -- d3
d3 -- d4
d4 -- Bottom [dir="forward"]
source -- cd1
subgraph {
node [style=filled, color="#EEEEFF"]
cd1_d1 [label="Kill"]
cd1_d2 [label="Continue"]
cd1_d1 -- cd1_d2 [dir="forward"]
node [style=filled color="#FFEEEE"]
cd1_d1_c1 [label="Conditional 1" ]
cd1_d1 -- cd1_d1_c1 [dir="forward"]
}
cd1 -- cd1_d1 [dir="forward"]
subgraph {
node [style=filled, color="#EEEEFF"]
cd2_d1 [label="Continue" group=cd2g]
cd2_d2 [label="Kill"]
cd2_d1 -- cd2_d2 [dir="forward"]
node [style=filled color="#FFEEEE"]
cd2_d1_c1 [label="Conditional 1" group=cd2g]
cd2_d1_c2 [label="Conditional 2" group=cd2g]
cd2_d1 -- cd2_d1_c1 [dir="forward"]
cd2_d1_c1 -- cd2_d1_c2 [dir="forward"]
}
cd2 -- cd2_d1 [dir="forward"]
}
给予:
我有一个通用的数据流结构,它主要由顶层决策堆栈组成。每个决定都会引导您在堆栈中上下移动,直到堆栈中间发生终止事件,或者直到到达堆栈的顶部或底部。一些决策涉及检查布尔条件以确定做出哪些决策。我正在寻找一些帮助来使输出更清楚地捕捉思维过程,这似乎主要是分组/排名方面的问题,但也可能是其他问题。
我第一遍的 graphviz 代码如下所示,用 dot
渲染后得到下图:
虽然这是我正在制作的决策堆栈的准确图表,但我希望它看起来更像这样:
这是 graphviz 代码:
graph decision_path {
node [shape="rectangle"]
edge [dir="both"]
newrank=true
Top
d1 [label="Decision 1"]
cd1 [label="Composite Decision 1"]
cd2 [label="Composite Decision 2"]
d2 [label="Decision 2"]
d3 [label="Decision 3"]
d4 [label="Decision 4"]
source [label="Decision Source" style="filled" color="#EEFFEE"]
Top -- d1 [dir="back"]
d1 -- cd1
cd1 -- cd2
cd2 -- d2
d2 -- d3
d3 -- d4
d4 -- Bottom [dir="forward"]
cd1 -- source [dir="back"]
subgraph {
node [style=filled, color="#EEEEFF"]
cd1_d1 [label="Kill"]
cd1_d2 [label="Continue"]
cd1_d1 -- cd1_d2 [dir="forward"]
subgraph {
rank=same
node [style=filled color="#FFEEEE"]
cd1_d1_c1 [label="Conditional 1"]
cd1_d1 -- cd1_d1_c1 [dir="forward"]
}
}
cd1 -- cd1_d1 [dir="forward"]
subgraph {
node [style=filled, color="#EEEEFF"]
cd2_d1 [label="Continue"]
cd2_d2 [label="Kill"]
cd2_d1 -- cd2_d2 [dir="forward"]
subgraph {
rank=same
node [style=filled color="#FFEEEE"]
cd2_d1_c1 [label="Conditional 1"]
cd2_d1_c2 [label="Conditional 2"]
cd2_d1 -- cd2_d1_c1 [dir="forward"]
cd2_d1_c1 -- cd2_d1_c2 [dir="forward"]
}
}
cd2 -- cd2_d1 [dir="forward"]
}
将 rankdir 更改为 LR - 可能没有必要,但似乎工作得很好。
graph decision_path {
rankdir=LR
node [shape="rectangle"]
edge [dir="both"]
newrank=true
nodesep=.6
{ rank=same
Top
d1 [label="Decision 1"]
cd1 [label="Composite Decision 1"]
cd2 [label="Composite Decision 2" group=cd2g]
d2 [label="Decision 2"]
d3 [label="Decision 3"]
d4 [label="Decision 4"]
Bottom
}
source [label="Decision Source" style="filled" color="#EEFFEE"]
Top -- d1 [dir="back"]
d1 -- cd1
cd1 -- cd2
cd2 -- d2
d2 -- d3
d3 -- d4
d4 -- Bottom [dir="forward"]
source -- cd1
subgraph {
node [style=filled, color="#EEEEFF"]
cd1_d1 [label="Kill"]
cd1_d2 [label="Continue"]
cd1_d1 -- cd1_d2 [dir="forward"]
node [style=filled color="#FFEEEE"]
cd1_d1_c1 [label="Conditional 1" ]
cd1_d1 -- cd1_d1_c1 [dir="forward"]
}
cd1 -- cd1_d1 [dir="forward"]
subgraph {
node [style=filled, color="#EEEEFF"]
cd2_d1 [label="Continue" group=cd2g]
cd2_d2 [label="Kill"]
cd2_d1 -- cd2_d2 [dir="forward"]
node [style=filled color="#FFEEEE"]
cd2_d1_c1 [label="Conditional 1" group=cd2g]
cd2_d1_c2 [label="Conditional 2" group=cd2g]
cd2_d1 -- cd2_d1_c1 [dir="forward"]
cd2_d1_c1 -- cd2_d1_c2 [dir="forward"]
}
cd2 -- cd2_d1 [dir="forward"]
}
给予: