1. dotコマンド(Graphviz)

1.1. What's?

dot言語という文法で書かれたテキストファイルから、図を作成するソフト


1.2. 使い方

・$ dot -Tpng -o 出力するファイル名 dotファイル  のように使う
・-T〜のオプションを変えれば、GIF, PNG, SVG, PDF, PostScriptなどで出力可


1.3. 文法

1.3.1. 単純な図形

以下、mytest.dotというファイル名で保存

digraph test {
	Tokyo -> Nigata -> Aomori;
	Tokyo -> Sendai -> Aomori [dir = both];
}

として、dot -Tpng -o mytest.dot output.png


1.3.2. 日本語表示

digraph test {
	Tokyo	[label = "東京"];
	Tokyo -> Nigata -> Aomori;
	Tokyo -> Sendai -> Aomori;
}


1.3.3. 細かな設定

1.3.3.1. ノードを結ぶ線についての設定

・線を点線or太線にする
 点線:Tokyo -> Uenoと記述したすぐ右に、[style=dotted]
 太線:同じく[style=bold]

・線の色を変える
 Shinjuku -> Okutama [color=red];

・線の横に文字を表示する
 Shinjuku -> Kobuchizawa [label=MoonlightShinsyu]

・矢印の先端の形を変える
 ■少し尖った形
 Sun -> Moon [ arrowhead = vee ]

 ■ダイヤモンド
 Sun -> Moon [ arrowhead = diamond ]

 ■矢印無し
 Sun -> Moon [ arrowhead = none ]


1.3.3.2. ノードの設定

・ノードの形を変える(1)
 Tokyo [shape=box];
 Tokyo -> Kobuchizawa;
  →Tokyoの枠が四角になる。
  →boxの他、ellipse(楕円、標準ではこれ)、circle(円)、plaintext(枠なし)
   など

 角を取るには、以下のようにする
 Yukito [shape=box style=rounded];
 Yukito -> Yue;

・ノードの形を変える(2)
 Shinjuku [shape=polygon,sides=5]
  →ノードが五角形になる

・ノードの形を変える(3)
 shapeをrecordにすると、表が作れる。
 表の構造はlabelに記載する。

 ■横に東京・新宿、とならぶ表ができ、Hirosakiと線でつながる
 Tokyo [shape=record label="東京都|新宿"];
 Tokyo -> Hirosaki;

 ■縦なら、こう
 Tokyo [shape=record label="{東京都|新宿}"];
 Tokyo -> Hirosaki;
  →縦に行を増やしてゆくには、{東京都|新宿|池袋|上野}のようにすれば良い

 ■入れ子にできる
 Tokyo [shape=record label = "{東京都|新宿|{池袋|いけふくろう}|上野}" ];
 Tokyo -> Hirosaki;

 ■htmlで表が書ける
	digraph html {
		Haribote [shape=none, margin=0, label=<
		<table border="0" cellborder="1" cellspacing="0">
		<tr><td>名前</td><td>評価(百点満点)</td></tr>
		<tr><td>ともよ</td><td>97</td></tr>
		<tr><td>さくら</td><td><font color="red">9999999999999999999999999999999999999</font></td></tr>
		</table>
		>];
	}

  cf.スペースはトークンの区切りと解釈されるので、\でエスケープする
  cf.カッコの類(〈〉)、|などを文字として使う場合もエスケープする

・ノードの横・縦の長さを変える
 Komoro [width=5,height=5]
 Shinjuku -> Kobuchizawa -> Komoro;
  →ノードの表示がwidth,heightに収まらなければ無視される。

 Komoro [width=1,height=1,fixedsize=true]
 Shinjuku -> Kobuchizawa -> Komoro;
  →こうすると、width,heightが必ず強制される。
  →表示する文字が多いと、枠からはみ出る

・ノードの文字の大きさを変える
 Tokyo [fontsize=36]
 Tokyo -> Tateyama;

・ノードの枠を何重かにする
 Shinjuku [peripheries=3]
 Shinjuku -> Kobuchizawa -> Komoro;
  とすると、ノードの枠が3重に表示される

・ノードの枠の色を指定する
 Shinjuku [color="red"]
 Shinjuku -> Kobuchizawa;

・ノードを指定した背景色で塗りつぶす
 Shinjuku [color="red",style=filled]
 Shinjuku -> Kobuchizawa;

・全ノードについて一括設定(node)
 node [shape=box]
 Shinjuku -> Kobuchizawa -> Komoro;
 Komoro -> Shinonoi -> Matsumoto;
 Matsumoto -> Kobuchizawa -> Tachikawa -> Shinjuku;

・ひとつのノードからの複数の分岐を、一度に記述する
 Shinjuku -> {Matsumoto; Nigata; Okutama}


1.3.3.3. その他

・コメントを付ける
 /*...*/や、//...はコメントとして無視される。C++と同じやな。

・参考文献とか
 http://www.graphviz.org/pdf/dotguide.pdf




2. gnuplot

2.1. What's

 数値の羅列などからグラフが描ける。

2.2. 使い方

2.2.1. 2値データからグラフを描く

 gnuplotと打って起動。
 plot "ファイル名"、としてグラフを書く


2.2.2. 3値データから3Dグラフを描く

 gnuplotと打って起動。
 splot "ファイル名"、としてグラフを書く


2.2.3. 既にある関数

 plot sin(x)、とすればサイン関数が描かれる


2.3. その他

 ・参考文献とか
   http://t16web.lanl.gov/Kawano/gnuplot/index.html



3. Mscgen

3.1. What's

縦に時間軸をとった図が描けます。
例えば、TCPプロトコルの3-way handshakeなどの解説でよく見るような図とかの作成に便利です。
作者が、Graphvizにインスパイヤされて作ったらしく、文法がdotに似ています。


3.2. 使い方

mscgen -i mscfile -o output.png -T png


3.3. 文法基礎

msc {
	a,b,c;
	a->b [label = "test"];
}
 のように記載します。
 a,b,cはそれぞれ縦軸の名前です。
 a->bはa軸からb軸に線を引く事を意味します。
 labelは、線の上に記載される文字です。


3.4. その他

 http://www.mcternan.me.uk/mscgen/
 を見ればいいと思う。




4. graph-easy

4.1. 使い方

 コマンドにテキスト出力:
  echo "[ one ] --> [ two ]" | graph-easy
  graph-easy フォーマットにしたがって書かれたファイル名

 その他:
  graph-easy フォーマットにしたがって書かれたファイル名 --png
  graph-easy filename output.svg --as_svg
  graph-easy filename output.jpg --as_jpg
   など


4.2. 基礎

・単純な構造
  [ one ] --> [ two ]

・線に名前を付ける
 [ tokyo ] -- train --> [ yurakucho ]

・ひとつのノードから複数に分岐する
 [ tokyo ] -- train --> [ yurakucho ],[ Ueno ]

・ノードを横に分割する
 [ tokyo|shinjuku ] --> [ yurakucho ]