(追記:2014-3-3) Gvizについてのまとめ頁を作りました。

Gvizの目次 - Rubyの世界からGraphvizの世界にこんにちは!


Graphvizには複数のレイアウトフォーマットがありますが、どれも名前が変わっていて生成されるレイアウトを名前から想像することが困難です。幾つかのレイアウトの説明はGraphvizのサイトに書いてあるのですが、それを読んでもやっぱりピンと来ません。その結果、毎度グラフを作るたびにレイアウトを試行錯誤することになります。

でも、レイアウトはやっぱりサンプルを見るのが一番手っ取り早いですよね。


そんなわけで…


Graphvizのレイアウトサンプルを作って、ここに貼っておくことにします。サンプルの作成にはいつもの様にGvizを使います。ちなみにGviz0.1.2では、gvizコマンドの-mオプションでlayouts一覧を表示できるようになりました。

% gviz -m layouts
Layouts:
  circo, dot, fdp, neato, nop, nop1, nop2, osage, patchwork, sfdp, twopi


サンプル生成─その1

最初に、1つのノードに対し複数のノードを連結したグラフを書いてみます。コードは次のようになります1。ノードの色付けをするためにColorable gemを使っています。

このコードのディレクトリでgvizコマンドを実行し、各レイアウト毎のpng画像を得ます。

% gviz
% open *.png


レイアウトサンプル─その1

生成されたレイアウト画像は以下のとおりです。

dot

階層型のデフォルトレイアウトです。

graphviz noshadow

neato

ばねモデルによるneatoレイアウトです。全体のエネルギーが最小になるようなレイアウトを実現します。ノードが100程度のグラフ生成に適しているそうです。

graphviz noshadow

fdp

同じくばねモデルによるレイアウトです。neatoに似てますが、アルゴリズムが異なるようです。

graphviz noshadow

sfdp

fdpのマルチスケール版とのことです。ノードが大量にあるグラフに適しているそうです。

graphviz noshadow

twopi

放射状レイアウトです。

graphviz noshadow

circo

環状レイアウトです。

graphviz noshadow

osage

ノードを整列配置するレイアウトです。

graphviz noshadow

patchwork

ノードをパッチワークのように配置するレイアウトです。

graphviz noshadow


レイアウトを変えただけで、こんなに多様なグラフが描けるなんて。Graphviz最高ですよね。

サンプル生成─その2

続いて、バイナリーツリー型のグラフを生成してみます。コードは以下のとおり。

ツリー生成のコードが若干トリッキーかも知れませんが、上から順番にツリーを作っているので追えばわかると思います。loopとeachを一気に抜けて終了するためにcatch-throwを使っています。


レイアウトサンプル2

生成されたレイアウト画像は以下のとおりです。

dot

graphviz noshadow

neato

graphviz noshadow

fdp

graphviz noshadow

sfdp

graphviz noshadow

twopi

graphviz noshadow

circo

graphviz noshadow

osage

graphviz noshadow

patchwork

graphviz noshadow

キレイ、キレイ!

以上、Graphvizのレイアウトサンプルを生成してみました。


=== Ruby関連電子書籍100円で好評発売中! ===

M’ELBORNE BOOKS

start_ruby ruby_object rack


  1. nop系の出力が上手くいかなかったので除外しました


blog comments powered by Disqus
ruby_pack8

100円〜で好評発売中!
M'ELBORNE BOOKS