Pit*_*tel 29 graphviz subgraph
我想让我的图表看起来像这样:

但我只能得到这个:

问题是,rankdir 不工作在subgraph.那么,如何模仿呢?
代码:
digraph G {
node [shape = circle]
0 [style = invis]
0 -> "0A"
subgraph clusterA {
label=A
"0A"
"1A"
"2A" -> "0A" [label=•]
}
subgraph clusterB {
label=B
"0B"
"1B"
"2B" -> "0B" [label=•]
}
subgraph clusterC {
label=C
"0C"
"1C"
"2C" -> "0C" [label=•]
}
subgraph clusterD {
label=D
"0D"
"1D"
"2D" -> "0D" [label=•]
}
subgraph clusterE {
label=E
"0E"
"1E"
"2E" -> "0E" [label=•]
}
subgraph clusterF {
label=F
{node [shape = doublecircle] "0F" "1F"}
"2F" -> "0F" [label=•]
}
"0A" -> "1B" [label=a]
"1A" -> "2B" [label=a]
"0B" -> "1C" [label=b]
"1B" -> "2C" [label=b]
"0C" -> "1D" [label=c]
"1C" -> "2D" [label=c]
"0D" -> "1E" [label=d]
"1D" -> "2E" [label=d]
"0E" -> "1F" [label=e]
"1E" -> "2F" [label=e]
}
Run Code Online (Sandbox Code Playgroud)
mar*_*pet 47
通常可以通过以下方式重现特定的图形布局:
这是我如何复制你的图表 - 或者至少是它的一部分:
digraph g {
rankdir="LR";
node[shape = circle, fontsize=14];
fontsize=18;
labeljust="l";
edge[style=invis, fontsize=12];
{ rank=same;
0 [style = invis];
01 [style = invis];
02 [style=invis];
0 -> 01 -> 02;
}
subgraph clusterA {
"0A" -> "1A" -> "2A";
"2A" -> "0A" [label=".", constraint=false, style=solid];
label="A";
}
subgraph clusterB {
"0B" -> "1B" -> "2B";
"2B" -> "0B" [label=".", constraint=false, style=solid];
label="B";
}
subgraph clusterC {
"0C" -> "1C" -> "2C";
"2C" -> "0C" [label=".", constraint=false, style=solid];
label="C";
}
0 -> "0A"[style=solid];
01 -> "0B"[style=invis];
02 -> "0C"[style=invis];
// edges between clusters
edge[constraint=false, style=solid];
"0A" -> "1B" [label=a]
"1A" -> "2B" [label=a]
"0B" -> "1C" [label=b]
"1B" -> "2C" [label=b]
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案不是很直观.有几点要做到这一点:
rankdir="LR"哪个产生了更好的边缘TB,但它并没有真正与图形的方向相对应结果是:

看起来rank=same可能是一个更干净的解决方案。查看Graphviz 中的将集群置于同一等级上。
您还可以使用“constraint=false”和不可见边来仔细控制节点等级。这与上面的答案基本相同。
digraph G {
newrank=true; // rank without respect to cluster
rankdir="LR";
node [shape = circle]
subgraph clusterA {
a0 -> a1 -> a2 [style = invis] // set node order in cluster
a2 -> a0 [constraint=false] //don't use this edge for ranking
}
subgraph clusterB {
b0 -> b1 -> b2 [style = invis]
b2 -> b0 [constraint=false]
}
a0 -> b1 [constraint=false]
a1 -> b2 [constraint=false]
}
Run Code Online (Sandbox Code Playgroud)