#インストール
matplotlib.pyplotを使った描画から、grahvizへ移行したいのでいろいろ試してみた.
PyGraphvizなる便利なものを発見.
公式( http://pygraphviz.github.io/documentation/pygraphviz-1.3rc1/install.html#quick-install )を参考にインストール.
僕はpipを入れているので,
% pip install pygraphviz
で終了.
#書いてみた
import pygraphviz as pgv
import networkx as nx
#普通にnetworkxのグラフを作成
h = nx.newman_watts_strogatz_graph(10,3,0.4)
#これをagraphクラス(PyGraphviz)に変換
g = nx.to_agraph(h)
#file.pdfという名前で出力,レイアウトはcircoを使う
g.draw('file.pdf',prog='circo')
(追記) Networkx 1.11から変換用のメソッドが別のモジュールに変更されている。
http://networkx.readthedocs.io/en/networkx-1.11/reference/drawing.html
g = nx.nx_agraph.to_agraph(h)
#実行
この5行を実行すると file.pdf ができている.
% python pgvSample.py
% ls
file.pdf
pgvSample.py
% open file.pdf
開いてみると,こんな感じ.
#レイアウト
グラフのレイアウトについては,documentationをみるといろいろ選択肢がある.
prog=[’neato’|’dot’|’twopi’|’circo’|’fdp’|’nop’]
それぞれどんなものかは,このサイト( http://melborne.github.io/2013/04/02/graphviz-layouts/ )でまとめてくださっていた.
#.dotファイルをつくる
上のプログラムにこの1行を追加するだけで,dotファイルとして保存できる.
g.write("file.dot")
こんな感じ.
% cat file.dot
strict graph "newman_watts_strogatz_graph(10,3,0.4)" {
0 -- 1;
0 -- 6;
0 -- 9;
1 -- 2;
1 -- 5;
2 -- 3;
2 -- 5;
2 -- 8;
3 -- 4;
3 -- 9;
4 -- 5;
4 -- 8;
5 -- 6;
6 -- 7;
7 -- 8;
8 -- 9;
}
AGraphクラスは,.dotファイルを読み込んでグラフをつくることもできるので,また別の機会に同じグラフを使う場合などは便利かも.(参考: Tutorial http://networkx.lanl.gov/pygraphviz/tutorial.html)
#その他参照先
networkXとの連携もいろいろ出来るっぽい.
**Graphviz AGraph (dot)**の項目 http://networkx.lanl.gov/reference/drawing.html