背景
言語処理100本ノック 2015をやっている最中に、有向グラフで表示する問題(Q44)に遭遇しました。 gographvizでDOT言語のdotファイルを作成し、graphvizで可視化したのでまとめます。
動作環境
# sw_vers ProductName: Mac OS X ProductVersion: 10.11.6 BuildVersion: 15G31 # go version go version go1.8 darwin/amd64 # dot -V dot - graphviz version 2.40.1 (20161225.0304)
インストール
graphvizのインストール
# brew install graphviz
gographviz packageのインストール
# go get github.com/awalterschulze/gographviz
有向グラフの作成
設定値などはGraphvizとdot言語でグラフを描く方法のまとめを参考にさせて頂きました。
gist4c915c1e14aae064a92cc30fbcb5eac7
dotファイル上で、Attributionにダブルクオーテーションが必要な場合は、エスケープしないとsyntaxエラーになるので注意してください。
また、今回のように事前のテストができる場合は問題ないですが、Attr
を動的に設定するような場合は、以下のようにエラーチェックをしたほうがよいでしょう。
// 例) colorschemeを設定する場合 if _, err := gographviz.NewAttr("colorscheme"); err != nil { panic(err) } nodeAttrs["colorscheme"] = "rdylgn11" // 問題ないことを確認してからmapに格納する
出力のdotファイルは以下のようになります。
gistc0bdfb47ec6948b6bed5cd51ad92f05c
有向グラフの出力
噂のGraphvizを使ってみるにもありますが、上記で出力したdotファイルをもとに、pngファイルとして結果を出力させるには以下のようにします。
# dot -T png diGraph.dot -o diGraph.png
結果です。いい感じですね。