CSV形式のグラフデータを、Graphvizが読み込める.dot形式に変換する。
Takeパッケージに含まれるmpolishingコマンド等では、 グラフの入出力にCSV形式を用いている。 グラフを資料に掲載したり、グラフの規模や密度を目視するには、 グラフを視覚化(画像として描画)する必要がある。
.dot形式に変換することで、 Graphviz(http://www.graphviz.org)のほか Gephi(http://www.gephi.org)など グラフ視覚化ソフトウェアに読み込ませることが可能となる。
ただし、Graphvizは比較的小規模なグラフの描画を目的としているため、 頂点数が数百〜数千となると描画時間の面で実用的でなくなる。 大規模グラフの操作・描画にあたってはGephiの使用を推奨する。
mgv.rb [ni=] [nf=] [nv=] [nr=] [-nl] ei= ef= [ev=] [er=] [-el] [-d] [o=] [--help]
ni= : 頂点集合ファイル名 nf= : 頂点ID項目名 nv= : 頂点属性(頂点の大きさ)項目名 nr= : グラフ描画時のノードの拡大率。1から10までの実数値を指定できる。デフォルト値は3 -nl : nv=で指定した値をノードの名称に加える ei= : 枝集合ファイル名 ef= : 開始頂点ID項目名,終了頂点ID項目名 ev= : 枝属性(枝の太さ)項目名 er= : グラフ描画時のエッジの拡大率。1から20までの実数値を指定できる。デフォルト値は10 -el : ev=で指定した値をエッジの横に表示する -d : 有向グラフとみなすとき指定する o= : 出力ファイル名(.dotファイル) --help : ヘルプの表示
入力するグラフデータは、ei=パラメータで指定する枝集合のCSVのみでかまわない。 頂点にも属性(大きさ)を与えたい場合は、ni=パラメータを用いて 頂点集合のCSVを指定することができる。
1行が1本の枝を表し、枝は開始頂点と終了頂点の2項目で表されている。
node1,node2 A,B B,C C,A C,D E,D
頂点に関する情報と、枝に関する情報からなる。
digraph G { edge [dir=none] n0 [label="A" height=0.5 width=0.75] n1 [label="B" height=0.5 width=0.75] n2 [label="C" height=0.5 width=0.75] n3 [label="D" height=0.5 width=0.75] n4 [label="E" height=0.5 width=0.75] n0 -> n1 [style="setlinewidth(1.0)"] n1 -> n2 [style="setlinewidth(1.0)"] n2 -> n0 [style="setlinewidth(1.0)"] n2 -> n3 [style="setlinewidth(1.0)"] n4 -> n3 [style="setlinewidth(1.0)"] }
GraphvizのGUIから対話的に読み込むことができるほか、 Graphvizと一緒にインストールされるdotコマンドを使用して 画像ファイル(.pngファイル)に直接変換することもできる。 視覚化したグラフをFigure 2.5に示す。
$ dot -Tpng rsl1.dot > rsl1.png $ open rsl1.png
![]() Table 2.5: Graphvizによる描画例 |
開始頂点と終了頂点からなる枝集合ファイルのみを与える。
$ more edge1.csv node1,node2 A,B B,C C,A C,D E,D $ mgv.rb ei=edge1.csv ef=node1,node2 o=rsl1.dot
ev=パラメータでval項目を属性(太さ)として指定している。 同時に-elオプションを付けることで、属性値もグラフに描画される。
$ more edge2.csv node1,node2,val A,B,10 B,C,20 C,A,30 C,D,40 E,D,20 $ mgv.rb ei=edge2.csv ef=node1,node2 ev=val -el o=rsl2.dot
ni=パラメータで頂点集合ファイルを指定する。 nv=パラメータで、val項目を属性(大きさ)として指定している。
$ more node1.csv node,val A,10 B,15 C,8 D,5 E,20 $ more edge1.csv node1,node2 A,B B,C C,A C,D E,D $ mgv.rb ei=edge1.csv ef=node1,node2 ni=node1.csv nf=node nv=val o=rsl3.dot
nr=パラメータで、ノードの拡大率を指定している。
$ more node1.csv node,val A,10 B,15 C,8 D,5 E,20 $ more edge1.csv node1,node2 A,B B,C C,A C,D E,D $ mgv.rb ei=edge1.csv ef=node1,node2 ni=node1.csv nf=node nv=val nr=5 o=rsl4.dot