AT&Tのオープンソースでグラフ構造を描画するツール。
dot言語を用いて記述する。
Doxygenなんかで関数呼び出しやクラスの関連図の可視化にも使われているようだ。

簡単な使い方

A→B, B→C, C→Aの辺を持つ有向グラフの描画
test.dot

digraph "g" {
   "A" -> "B" ;
   "B" -> "C" ;
   "C" -> "A" ;
}

で、test.dotをdottyかlneatoに食わせると新しいウィンドウで描画する。
ファイルに書き出すときは、

dot -Kneato -Tgif test.dot -o test.gif

引数の-Kはレイアウトエンジンでcirco, dot, fdp, neato, twopiの5つのどれか。-Tは出力ファイルのフォーマットでdot, gif, jpg, png, ps, svgとか色々ある。

graphviz-test.gif

dottyの使い方

dottyは対話的にノードや辺を追加してグラフを描画するツール。

  • 左クリックでノードの追加
  • ホイール長押し+ドラッグで辺の追加
  • 右クリックで色々メニューが出る。attrで属性の変更。

レイアウトの仕方が違うdottyとlneatoがある。実はleftyを実行するラッパーなので、次のようにleftyをコマンドラインから呼び出しても同じ。上がdottyで下がlneato。

lefty -e load('dotty.lefty');dotty.simple(null);
lefty -e load('dotty.lefty');dotty.protogt.lserver='neato';dotty.simple(null);

dottyはPEAT図とか有向グラフで、lneatoは無向グラフで使うのがいいと思う。

属性

よく使いそうなのをピックアップ。マニュアルにもっと載ってる。

  • ノードの属性
    labelラベル
    color
    fillcolor背景色
    fontcolor文字色
    fontsizeフォントサイズ
    fontnamefont family
    shapeellipse circle doublecircle polygon box point diamond
    regularshape=polygon時に正n角形にする。(true/false)
    sidesshape=polygon時の辺の数
    distortionshape=polygon時に台形にする(0.0~)
    skewshape=polygon時に斜めにする(0.0~)
    orientationノードの回転
    stylebold dotted filled
  • エッジの属性
    arrowhead辺の開始点の矢印のスタイル normal none
    arrowtail辺の終了点の矢印のスタイル normal none
    arrowsize矢印のサイズ
    color矢印の色
    dirforward back both none
    fontcolorフォントの色
    fontnamefont family
    fontsizeフォントサイズ
    headlabelhead側に置くラベル
    taillabeltail側に置くラベル
    labelラベル
    labelfontcolorラベルの色
    stylebold dotted filled
    constraint辺をノードのランキングの計算で使うかどうか(true/false)
    minlen辺の最小の長さ デフォルトで1
    weight辺の重み付け デフォルトで1。二つの枝の重いほうが真横(真下)に来る。
  • グラフの属性
    bgcolor背景色
    colorアウトラインなどの色
    fillcolor塗りつぶし色
    fontcolor文字色
    fontnameフォント
    fontsizeフォントサイズ
    fontpathフォントを探すパス
    rankdirLR(left-right)か、TB(top-bottom)
    ranksepノード間の距離。デフォは0.75
    splinesスプラインで描画(true/false)
    overlap重ねて描画(true/false)
    orientationportrait/landscape
    ratiofill/auto/compress

日本語

Windows版のdottyで日本語を表示することはできない(ようだ)が、dotから出力する画像ファイルで日本語を出力することは可能。バージョンはGraphviz2.6。以下そのやりかた。

  1. dotファイルをUTF-8で書く。fontnameにTTFのファイル名を書く。Windows2000の場合、C:\WINNT\FONTにパスが通ってるので、適当に見繕ってARIALUNI.TTFを使って見る。
    graph "g" {
       node [shape=circle, fontname="arialuni.ttf", fontsize=10, 
           width=0.5, margin=0.0]
       edge [minlen=5]
       "五代" -- "響子" -- "一ノ瀬" -- "五代";
       "三鷹" -- "響子";
       "一ノ瀬" -- "三鷹";
       "音無家" -- "響子"
       "明日菜" -- "三鷹";
       "九条家" -- "明日菜";
       "三鷹家" -- "三鷹";
       "九条家" -- "三鷹家";
       "こずえ" -- "五代";
       "八神" -- "五代";
    }
  2. 普通に出力
    dot -Kneato -Tgif test.dot -o jpfont.gif
    jpfont.gif

日本語その2

dotty.gif

leftyの改造によるdottyの日本語入力。

まだ改造途中でshiftjis特有の文字化けが残っている。たとえば、表示が侮ヲになったりするので、「set label=日本語\\\表示」みたいに特定の文字をエスケープしてやらないといけない。あとファイルの入出力もshiftjisで、dottyに直接食わせることができるのがutf-8なので、この辺もutf-8に統一したほうがよい。内部コードをutf-8に統一するのが一番近道のような気がするが・・・めんどくさそうだったのでとりあえず放置して様子見中。

dot言語メモ

  • ノードのランクを同じにする
    digraph g {
        1 -> 2 -> 3;
        {rank=same; 1 A B C;}
        {rank=same; 2 D E F;}
        {rank=same; 3 G H I;}
    }
  • ノードのクラスタ化
    digraph g {
        subgraph cluster1 {
            label=cluster1;
            A B C;
        }
        subgraph cluster2 {
            label=cluster2;
            D E F;
        }
        A -> E -> D
        A -> C -> F
    }
  • ちょっと便利な書き方
    n0 -> n1
    n0 -> n2
    n0 -> n3
    というのは
    n0 -> {n1 n2 n3};
    というふうにまとめて書ける。

Tcl関連

  • Package ASDOT
    Tcllibのstruct::graphとdot形式の相互変換。struct::graphのバージョンアップで挙動不審になってる気がする。簡単なdotを読み込めん。簡単な出力はできるようだ。

コメントをどーぞ

  • dottyの使いかたで「右クリックでノードの追加」とありますが、当方の環境では 左クリックでした。 -- 2005-09-23 19:41:05 (金)
  • すいません間違えていました。ご指摘ありがとうございます。 -- reddog? 2005-09-23 21:58:52 (金)
  • "惣一郎"ノードも欲しいですね ;-) -- 2005-10-06 21:14:04 (木)
  • dottyの日本語入力するための方法を教えていただけるとありがたいです -- とおりすがり? 2005-11-01 20:30:53 (火)
  • allowhead,allowtail,allowsizeはarrowhead,arrowtail,arrowsizeの間違いでは? -- none? 2005-11-10 17:40:25 (木)
  • 直しました。すいません。 -- reddog? 2005-11-10 18:02:13 (木)
  • 画像の直リンクは迷惑なのでしないでください。 -- reddog? 2006-02-24 23:12:31 (金)

CategoryTclTk


Attach file: filedotty.gif 96 download [Information] filejpfont.gif 78 download [Information]

|New|Edit|Freeze|Diff|Backup|Upload|Copy|Rename|
Last-modified: 2006-02-24 (Fri) 00:00:00 (909d)
HTML convert time: 0.141 sec.