8

左から右にレイアウトされたグラフがあります。このグラフにはいくつかの要素がありますが、別のノードを基準にして配置したいと思います。たとえば、このグラフがある場合:

digraph "Test" {
    rankdir = "LR"
    A -> B
    B -> C
    D -> B
    note -> B

    note [ shape="house" ]
};

次のようにレンダリングされます。

通常のDOTレイアウト

ただし、「メモ」ノードは、次の(手動で作成された)グラフのように、それが指しているノードの真下に常に配置されるようにしたいと思います。

必要なDOTレイアウト

rankdir異なる属性を使用しrankてサブグラフを試してみましたconstraintが、DOTを数日間しか試していなかったため、これを機能させることができませんでした。

4

2 に答える 2

10

エッジを定義する前にノードを列挙し、それらをサブグラフに配置することでノードをノードと同じランクに制約できます。Bnote

digraph "Test" {
    rankdir = "LR"
    A;D;
    {rank=same; note; B;}
    C;

    A -> B
    B -> C
    D -> B
    B -> note [dir=back]

    note [ shape="house" ]
};

noteノードをノードの下に配置するBには、エッジの方向を逆にdir=backして、矢印を正しく描画するために追加する必要があることに注意してください。

graphviz出力

于 2012-12-31T15:24:31.060 に答える
3

ノードを移動する一般的な手法は、非表示のエッジを作成することです。あなたの場合、からAへのエッジを作成しnote、それを非表示としてマークしてから、からnoteへのエッジBを非制約としてマークすることができます。

A -> note [style="invis"];
note -> B [constraint=false];
于 2012-12-31T07:55:20.230 に答える