networkXのグラフをgraphvizで出力 (PyGraphviz)

  • 18
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

インストール

matplotlib.pyplotを使った描画から、grahvizへ移行したいのでいろいろ試してみた.

PyGraphvizなる便利なものを発見.
公式( http://pygraphviz.github.io/documentation/pygraphviz-1.3rc1/install.html#quick-install )を参考にインストール.

僕はpipを入れているので,

% pip install pygraphviz

で終了.

書いてみた

pgvSample.py
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')

実行

この5行を実行すると file.pdf ができている.

% python pgvSample.py
% ls
file.pdf
pgvSample.py
% open file.pdf

開いてみると,こんな感じ.

Screen Shot 2014-10-05 at 12.31.37 AM.png

レイアウト

グラフのレイアウトについては,documentationをみるといろいろ選択肢がある.

prog=[’neato’|’dot’|’twopi’|’circo’|’fdp’|’nop’]

それぞれどんなものかは,このサイト( http://melborne.github.io/2013/04/02/graphviz-layouts/ )でまとめてくださっていた.

.dotファイルをつくる

上のプログラムにこの1行を追加するだけで,dotファイルとして保存できる.

pgvSample.py
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