3

多くのノードのランクを明示的に指定し、クラスターを指定するグラフを作成しようとしています。次のコードは、必要なタイプのグラフを生成します。

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 では失敗することに注意してください...

4

1 に答える 1

1

いくつかの考え

  • スタイリングを取得するには、サブグラフに「cluster」で始まる名前を付ける必要があると思います。実際、クラスタープレフィックスがないと、何も実行されない可能性があり、これが多くの問題の原因となる可能性があります。
  • rankdir=LRを繰り返す必要はありません。一番上で一度指定すれば十分です。
  • サブグラフ内のどのノードも相互に依存関係がない場合、それらはすでに同じランクにあるはずであり、rank=sameは必要ないはずです。

これが私のために働く1つのバージョンです:

    digraph {
    rankdir=LR
    subgraph cluster0 {
        "MATH 208"
        "MATH 211"
        graph [style="rounded,filled", color=gray]
    }
    subgraph clusteryear1 {
        subgraph cluster100{
            "MATH 100"
            "MATH 110"
            graph [rank=same]
        }
        subgraph cluster101{
            "MATH 101"
            "MATH 211"
            "MATH 208"
            graph [rank=same]
        }
    }
    subgraph clusteryear2 {
        subgraph cluster205{
            "MATH 205"
            "PHIL 203"
            graph [rank=same]
        }
    }
    subgraph clusteryear3 {
        subgraph cluster311{
            "MATH 311"
            "MATH 312"
            "MATH 375"
            graph [rank=same]
        }
    }
    subgraph clusteryear4 {
        subgraph cluster447 {
            "MATH 447"
            "MATH 412"
            graph [rank=same]
        }
    }
    "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"
}
于 2013-01-28T16:48:42.430 に答える