多くのノードのランクを明示的に指定し、クラスターを指定するグラフを作成しようとしています。次のコードは、必要なタイプのグラフを生成します。
digraph {
rankdir=LR
subgraph cluster0 {
"MATH 208"
"MATH 211"
graph [rankdir=LR, style="rounded,filled", color=gray]
}
subgraph year1 {
subgraph {
"MATH 100"
"MATH 110"
graph [rankdir=LR, rank=same]
}
subgraph {
"MATH 101"
"MATH 211"
"MATH 208"
graph [rankdir=LR, rank=same]
}
graph [rankdir=LR]
}
subgraph year2 {
subgraph {
"MATH 205"
"PHIL 203"
graph [rankdir=LR, rank=same]
}
graph [rankdir=LR]
}
subgraph year3 {
subgraph {
"MATH 311"
"MATH 312"
"MATH 375"
graph [rankdir=LR, rank=same]
}
graph [rankdir=LR]
}
subgraph year4 {
subgraph {
"MATH 447"
"MATH 412"
graph [rankdir=LR, rank=same]
}
graph [rankdir=LR]
}
"MATH 100" -> "MATH 101"
"MATH 100" -> "MATH 208"
"MATH 101" -> "MATH 205"
"MATH 110" -> "MATH 311"
"MATH 211" -> "MATH 311"
"MATH 110" -> "MATH 312"
"MATH 211" -> "MATH 312"
"PHIL 203" -> "MATH 375"
"MATH 110" -> "MATH 447"
"MATH 211" -> "MATH 447"
"MATH 311" -> "MATH 412"
"MATH 312" -> "MATH 412"
}
これにより、「MATH 101」と同じランクの「MATH 211」で正しいグラフが生成されますが、graphviz は警告を発行します。
Warning: MATH 208 was already in a rankset, ignored in cluster pruned
Warning: MATH 211 was already in a rankset, ignored in cluster pruned
year1 サブグラフから "MATH 211" と "MATH 208" を削除すると、graphviz は文句を言いませんが、結果のグラフには "MATH 101" と同じランクのクラスターがなくなります (なぜそうなるのでしょうか...):
最初のグラフを生成するためにドット ファイルを再配置/再注文する方法はありますが、警告はありませんか? または、特定のクラスターを別のノードと同じランクに配置するように指定するには?
このグラフは、graphviz 2.26 では正常にコンパイルされますが、graphviz 2.28 では失敗することに注意してください...