2009-06-27

Graphviz で Edge を見えなくする方法

Graphviz で Edge (ノードとノードを繋ぐワイヤーもしくは矢印のこと) を見えなくするには、style に invis を設定する。例えばこんな感じ。

a -> b [style=invis];

複数の Edge を見えなくさせるには、こんな風に書いてもいい。

{
  edge [style=invis];
  a -> b;
  a -> c;
  a -> d -> e;
}

別解

Edge を消す方法には、背景色と同じ色を Edge に設定する方法もある。

a -> b [color=white]

ただ、この方法だと背景色を他のものに変えた時に Edge が再び現れてしまう。また、ノードの枠線を矢印の先が白色で上書きして、ほんの少しだけど枠線が欠けたやうに見えてしまう。あまりスマートな解法じゃない。

ぼくは Blogger の歴史 を Graphviz で描く時にこの方法を使ったけど、今はもう style=invis 方式に変えてしまった。

見えない Edge Tips

ぼくは「Blogger の歴史」で、こんな風に「見ない Edge」を使った。

digraph g {
# Headers
  {
    node [shape=plaintext];
    row1; row2; row3;
  }
  { rank=same; row1; row2; row3; }
  { 
#    edge [style=invis];
    row1 -> row2 -> row3;
    row1 -> a;
    row2 -> c;
    row3 -> e;
  }

# Relations
  { rank=same; b; c; }
  a -> b -> c -> d;
  e -> f;
}

列の説明をグラフの上に書く、というスクリプト。row1, row2 row3 を rank=same を使って同階層にまとめている。これを絵にするとかうなる。

sample1

そして、style=invis で Edge を消すと

sample2

ほら、いい感じ。

もっと複雑なグラフでも、rank を使って矢印を張り、edge を消してしまうと幸せになれることが多い。思い通りにノードを配置できないことがあったら、是非思い出して欲しい。

No comments:

Post a Comment