web-dev-qa-db-ja.com

Graphvizでクラスターを同じランクに配置する

これら2つのノードが同じレベルに表示されるようにしたい:

enter image description here

digraph G {
    subgraph cluster1 {
        label="Local Datacenter";
        router1;
        Host1;
    }
    subgraph cluster2 {
        label="Remote Datacenter";
        router2;
        Host2;
    }
    router1 -> router2;
    router2 -> Host2;
    router1 -> Host1;
}

rank=samerank=minを使ってみましたが、必要な機能が得られません。

興味深いことに、rankdir=LRを設定し、ルーターからホストへの2つのエッジをコメント化すると、希望どおりの外観が得られますが、エッジはそのままにしておきます。

31
tinypigdotcom

ルーター間のエッジを変更するだけです。

router1 -> router2[constraint=false];

constraint は、ノードのランキングでEdgeを使用する必要があるかどうかを示します。

32
marapet

newrank グラフ属性(GraphViz 2.30で追加)を使用して、クラスターに属するノードのrank=sameを定義できる新しいランキングアルゴリズムをアクティブにすることができます。

上部に次の行を追加します。

newrank=true;

次の行をクラスター定義の後に追加します。

{ rank=same; router1; router2; }

結果のグラフは次のとおりです。

routers with same rank

59
dubek