2009-06-26

Graphviz に画像を埋め込む; 例. 画面遷移を描く

昨日、Blogger の歴史年表を描くのに graphviz のドキュメントを読んでいたら、画像を埋め込む方法を見つけた。

サンプル

画面遷移のサンプルを描いてみた。まずは実行例とソースコードをばご覧あれ。

Ubuntu で slapd をインストールする時の設定画面の画面遷移。

Graphviz - images

digraph G {
  node [shape=plaintext];

  slapd1 [label=<<table><tr><td><img src="s1.png"/></td></tr></table>>];
  slapd2 [label=<<table><tr><td><img src="s2.png"/></td></tr></table>>];
  slapd3 [label=<<table><tr><td><img src="s3.png"/></td></tr></table>>];
  slapd4 [label=<<table><tr><td><img src="s4.png"/></td></tr></table>>];

  slapd1 -> slapd2 -> slapd3 -> slapd4;
}

s1.png から s4.png まで、4 枚の画像を用意してある。

解説

gnaphviz では、label の指定に HTML ライクな書式が使える。使える要素は、table, br, font, img の 4 つ。これを " ではなく < と > で囲む。

例えば、

  foo [label="foo\nbar"]

をこの書式で書くと、次のやうになる:

  foo [label=<foo<br/>bar>]

茶目っ気を出して、ラベルの中で色を変えることも可能。

  foo [label=<<font color="blue">foo</font><br/><font color="red">bar</font>>]

table, br, font はどこででも書けるけど、img 要素は table の中でしか書けない。table の中では tr, td 要素を使うことができる。なので画像を貼る最小のコードは次のやうになる。

  hoge [label=<<table><tr><td><img src="hoge.png"/></td></tr></table>>];

img 要素の属性は src と scale の 2 つのみ。HTML の alt 属性はない。

scale 属性は table のセルに余分なスペースがある時の振る舞いを決定する。属性値は次の通り:

  • false (default): 何もしない。そのままのサイズを維持。
  • true: 画像を一様に合わせるように (uniformly to fit) 拡大。
  • width: 画像を幅に合わせて拡大
  • height: 画像を高さに合わせて拡大
  • both: 画像を幅と高さに合わせて拡大

最後に、node に label を付ける際はサンプルのやうに node [shape=plaintext]; を付けるといい。そうしないと、画像の周りに円が描かれてしまう。

No comments:

Post a Comment