グラフの形を思い通りにする

graphviz-align.png

同一グループに属するノードがエッジで結ばれた場合、 そのエッジはなるべく直線に近く、かつなるべく垂直になるように配置される。

グループ

各ノードをグルーピングすることができます。 この場合の効果は、

同一グループに属するノードがエッジで結ばれた場合、 そのエッジはなるべく直線に近く、かつなるべく垂直になるように配置される。
です。 上述の例で、a と c、b と d にそれぞれ同じグループ値を与えてみます。

    1 : digraph sample {
    2 :   graph [size = "1.5, 2.5"];
    3 :   a [group = 1];
    4 :   c [group = 1];
    5 :   b [group = 2];
    6 :   d [group = 2];
    7 :   a -> b;
    8 :   a -> c;
    9 :   b -> d;
   10 :   a -> d;
   11 :   b -> e;
   12 :   e -> d;
   13 : }

この場合の結果は、sample06-08.gif
となります。

dotの場合 同じ階層にする

rank

same
同じ階層である
min
最低階層
max
最高階層
source
すべてのノードがminimumランクになるらしい。
sink

{rank=same; ノード名1; ノード名2;}

とやると、ノード名1とノード名2は同じランク(階層)ですよ、と知らせることになる。なので、レイアウト上同じ高さに来てくれる。
このrank=sameは結構使えるね。

最上位、最下位を固定したいときは

input [label="最下位"];
    {rank=min;input;}
output [label="最高位"];
{rank=max;output;}

見えないノードを作ってレイアウト調整する

node [fixedsize = true, width = 0.01, height = 0.01, shape = point,color="#00000000"];

こういうスタイルのダミーノードを置いて、それに接続するとよい

見えない辺を作ってレイアウト調整する

a->b[style=invis]

Bibliography
2. Graphviz でシーケンス図…透明なエッジ、破線に混じった小さい黒い点のノードなどを駆使して上手にシーケンス図を表現してあります

サポートサイト Wikidot.com