macOSXでGraphviz。書き方例

関係図を作りたくて、何か良いツールはないかと思い探したところGraphvizという図形作成ソフトを見つけた。

これがなかなかイカすやつで、複雑な図形もほぼ思い通りに書ける。

図1:友人の関係図
大学と高校の友人関係(名前はテキトー。)

図1の.dotテキスト


graph friend_list{
node[fontname = "Osaka" shape = circle];
"TamaC";

subgraph cluster_daigaku {
label = "大学"[fontname = "Osaka"];
node[fontname = "Osaka"];
"田中";
"松田";
"木村";
"山口";
"酒井";
"井上1"[label = "井上"];
}

"TamaC" -- "田中";
"TamaC" -- "松田";
"TamaC" -- "木村" -- "山口";
"TamaC" -- "酒井" -- "田中";
"TamaC" -- "井上1";

subgraph cluster_koukou {
label = "高校"[fontname = "Osaka"];
node[fontname = "Osaka"];
"三浦";
"荒木";
"前田";
"山田";
"井上2"[label="井上"];
}

"TamaC" -- "三浦" -- "山田";
"TamaC" -- "荒木";
"TamaC" -- "前田";
"TamaC" -- "山田";
"TamaC" -- "井上2";
}


"田中";
のように「これから"田中"を使いますよー」な宣言をしているように見えるが
これはこんなことをしなくてもok。
ただ急に大きさや表示名に変更を加えたいとき、どんなノードを使っているかを一目できるようにと考えるとこういった書き方が良いと思う。

図2:データリレーション図
askeetより。

図2の.dotテキスト


graph askeet{
node[shape = circle];
edge[arrowhead = dot, headlabel = n, taillabel = 1];
"question"[width = 2];
"answer"[width = 3];
"user"[width = 1];
"interest"[color = "blue"];
"relevancy"[color = "blue"];

"question" -- "answer"[style = dotted];
"question" -- "interest";
"answer" -- "relevancy"
"user" -- "question"[style = dotted];
"user" -- "answer"[style = dotted];
"user" -- "interest";
"user" -- "relevancy";
}


詳しい書き方の参照は→ http://homepage3.nifty.com/kaku-chan/graphviz/index.html

Graphvizの書き方にはいろいろ流派がありそう。汎用性を満たす為にベストな書き方は見つけてないが、自分はsubgraphの下に、そこから派生するノードを指定するやり方の書き方が好き。

PHPと連動して書ける方法を研究中。