web-dev-qa-db-ja.com

ドットでエッジ方向を変更する

非常に単純な図をドットで描画しようとしています。

digraph untitled
    {
    rankdir = LR;
    {rank=same; S; A}
    B -> A;
    B -> S;
    A -> A;
    S -> S;
    A -> S ;
    S -> A;
    A -> T;
    S -> T;
}

私が得る結果は

enter image description here

エッジをS -> Sから変更する必要がありますが、矢印の方向を変更して、左から右にループするようにします。

19
JoFrhwld

矢印の方向を変更するには、dir=backを使用するだけです。

S -> S [dir=back];

しかし、あなたの場合、これは必要ではないようです...(以下を参照)

エッジS -> SA -> SおよびS -> Aエッジが重複しているため、SとAの間に両端に矢印のあるエッジを1つだけ使用することをお勧めします。

digraph g {
    rankdir = LR;
    {rank=same; S; A}
    B -> A -> T;
    B -> S -> T;
    A -> A;
    S -> S;
    A -> S[dir=both];
}

graphviz output

46
marapet

矢印を左から右にループさせることができるかどうかはわかりません。 dirオプションを使用すると、矢印をある程度制御できます。

S->S[dir=both];

さらに、リンクの長さをSからSに変更することでレイアウトに影響を与えることができます。また、ノードがリストされている順序を逆にすることで(非自己参照)矢印の方向を制御することもできます。

S->T;
becomes
T->S;

ほとんどの場合、制約が少ないほど、より良い図が作成されることがわかりました。 rank = sameコマンドを削除してみることをお勧めします。

1
Chris Walton