http://www.research.att.com/sw/tools/graphviz/
1. graphviz概要
graphvizは、UNIXまたはMS-Windows用のグラフ描画ツールである (webサービスも利用可)。ソースコードと共通プラットフォームのバイナリ実行形式ファイルが利用できる。graphvizは、グラフとネットワークの幾何学的図形を構築する。グラフ描画の自動生成は、データベース・デザインやソフトウェア工学、VLSI、ネットワーク・デザインやその他の分野の視覚化インターフェイスなどで重要である。graphvizツールが特に役立つであろうケースを例として挙げると、
・ プログラム開発などで、プログラムの型、手順、ソースファイル間の関係を理解する必要がある場合
・ インターネットバックボーンにあるボトルネックを探すときに個々のリンクだけでなくそれらの関係を探す必要がある場合
・ データベース・スキーマや、知識ベース、絵によって表され配布されたプログラムなどをブラウズしたい場合
・ リンクされた文書のコレクションのoverviewを見たい場合
・ 電話呼び出し、またはe-mailメッセージのデータベースにおいて、興味ある子ユニティやパターンを見つけたい場合
である。graphviz開発の目的は二つ。
(1) 数百ものノードに至るまでの非常に可読なグラフ描画を作る。手動レイアウト(CADで作る)の質に近づくような効果的なアルゴリズムを見つけることである。
(2) 便利なグラフ描画システムやwebサービスを創ることである。これは役に立つインターフェイスを定義することであり、アプリケーションをサポートする特徴である。
2. グラフ描画
2.1. グラフレイアウト
グラフの効果的な視覚化というものは、データの興味深い特徴を明らかにするであろう。グラフ・レイアウト・アルゴリズムの客観的な性質のほとんどは、少数の単純な視覚化原理に相当している: 判読できるテキストラベルまたはオブジェクトの形の選択や色、スタイルを通してオブジェクトの同定を簡単にするだろう。エッジの交差 (edge crossing)やシャープな折れ曲がり、無関係なオブジェクト同士の相互作用などを避ける。作図中のパスやエッジのトレースを助けるため、視点の動きのコントロールなど。データの対称性、類似性、規則性を強調し、パターンを明らかにする。これらの特徴を持っているレイアウトは、可読性が高く、記憶に残るものだ。
2.2. graphvizの提供するツール群プログラム
dot
有向グラフのレイアウト・ツール。入力はdot言語で記述し、出力は、bitmapなど様々なグラフィック形式に対応。
neato
無向グラフのレイアウト・ツール (ばねモデル)。入力はdot言語で記述し、出力は、bitmapなど様々なグラフィック形式に対応。
twopi
無向グラフのレイアウト・ツール (circularモデル)。入力はdot言語で記述し、出力は、bitmapなど様々なグラフィック形式に対応。
lefty
有向グラフのleftyスクリプト。
dotty
画像用two-view グラフィック・エディタ。dottyを書くのに使用。
lneato
無向グラフのleftyスクリプト。
2.3. dotを用いた最も簡単なグラフの描き方 (Linux上のXウインドウ環境)
以下を拡張子dotとしてテキストファイル保存する。(ファイル名:sample.dot)
digraph G {
node [shape = "ellipse"];
"Bioinformatics memo" [shape = "box"];
"Pajek memo" -> "Bioinformatics memo" [label = "howto"];
"Complex networks" -> "Bioinformatics memo" [label = "overview"];
"Graphviz memo" -> "Bioinformatics memo" [label = "howto"];
}
ターミナル上で次のコマンドをタイプする。($はシェルプロンプトを表す)
$ dot -Tps sample.dot -o sample.ps
これで、sample.psという名前のPostScriptファイルが出来る。
ghostscript のようなPostScriptファイルビューワがあるならば、
$ ghostscript sample.ps
とすれば、下記のグラフが見られる。プログラムdotが読み込むdotファイルは、dot言語によって書かれており、グラフの詳細な設定はこれによって指定できる。
おまけ。
dotファイル読み込みと描画を一度にするシェルスクリプト (ファイル名:mkgraph)
#!/bin/sh
if [ -r $1 ]
then
filename1=$1
filename2=$2
else
echo "WARNING! No such file...$1"
echo "usage: mkgraph hoge.dot hoge.ps"
fi
dot -Tps $filename1 -o $filename2
ghostscript $filename2
References
[1] Welcome to GraphViz
[2] Graphviz Examples
注:マニュアルを多分に参照しています。(大雑把に訳しただけ?)

















