PyGraphvizをWindowsにインストールする手順が少し複雑だったので簡単にまとめておきます.
PyGraphvizとは
- GraphvizをPythonで使うためのインターフェース
- Graphvizの豊富なグラフ描画レイアウトをNetworkXと連携できて便利
- PyGraphvizの公式サイト
NetworkXでは座標指定をしないと位置関係が理解しづらいグラフでも,
PyGraphvizを使うと座標指定をすることなく,見やすく描画することができます!
インストール手順
目次の順番にインストールをしていきます.
環境
以下の環境で実行しました.
- Windows 10
- Python 3.9.7
- Graphviz 6.0.2
- PyGraphviz 1.10
用意するもの
- Python(バージョン 3.8, 3.9, 3.10)
- Graphviz (バージョン 2.42 以降)
- Microsoft C++ Build Tools(PyGraphvizを動かすためにC/C++のコンパイラが必要)
1. Graphviz
Graphviz公式のダウンロードページへアクセス
Windows用の項目でgraphviz-6.0.2 (64-bit) EXE installer [sha256] をダウンロード.
↑このリンクからでもダウンロードできます.
1.インストールできたら実行します.指示に従いそのまま進んでいきます.
2.ここでユーザー環境変数にGraphvizのパスを通しておくと後が楽になります.
3.インストール先のフォルダを指定します.
ここで指定したパス C:\Program Files\Graphviz を覚えておきます.
4.インストール完了
これでGraphvizのインストールは完了です.
2. Microsoft C++ Build Tools
次にPyGraphvizを動かすために,C++のコンパイラをダウンロードします.
ダウンロードが開始されます.
実行するとこのような画面になります.
インストールを待ちます.
インストーラが起動されるとこの画面が表示されるので,以下のオプションでインストールをします.
ダウンロードが始まります.
以上でC++コンパイラのインストールは終了です.
3. PyGraphvizをインストール
PyGraphviz公式ドキュメントに従って,このようなコマンドでインストールします.
$ pip install --global-option=build_ext --global-option="-IC:\Program Files\Graphviz\include" --global-option="-LC:\Program Files\Graphviz\lib" pygraphviz
オプションでGraphvizのインストール先を指定し,Graphvizを読み込んでからPyGraphvizをインストールするコマンドです.
今回はC:\Program Files\Graphviz
にGraphvizをインストールした場合を想定しているので,各自の環境に応じて
- IC:\Program Files\Graphviz\include
- LC:\Program Files\Graphviz\lib
の部分は変更する必要があります.
※1回目の実行で上手くいかない場合がありますが,もう一度実行するとSuccessfully installed pygraphviz-1.10となります.
インストールできたかの確認
$ pip show pygraphviz
----------------------------------------------------
Name: pygraphviz
Version: 1.10
Summary: Python interface to Graphviz
Home-page: http://pygraphviz.github.io
Author: Aric Hagberg
Author-email: aric.hagberg@gmail.com
License: BSD
Location: c:\users\nabe6\anaconda3\lib\site-packages
Requires:
Required-by:
バージョン1.10のPyGraphvizがインストールされていることが確認できました.
これでPyGraphvizのインストールは完了です.
4. 実際にNetworkXと連携してみる
NetworkXで作ったグラフを実際にpygraphvizで書き直してみます.
グラフ作成とライブラリの準備
import networkx as nx
import random
from networkx.drawing.nx_agraph import graphviz_layout
random.seed(0) # seed値を0に固定
G = nx.DiGraph([(1,2),(1,3),(2,4),(2,5),(3,6)]) # 1から2,1から3へのエッジとなるような有向グラフの作成
Networkxのみで描画した場合
nx.draw(G,with_labels=True)
PyGraphvizで書き直した場合
pos = graphviz_layout(G,prog="dot") # 描画レイアウトの指定 Graphvizの"dot"というレイアウトを使用
nx.draw(G,pos=pos,with_labels=True) # pos=posでGraphvizのレイアウト通りのグラフを描画
prog="dot"
はGraphvizの描画レイアウトで,有向グラフを階層的に描画することができます.
"dot"の他にも,GraphvizにはNetworkXだけでは描けないような豊富な描画レイアウトが揃っているので,PyGraphvizを使ってきれいなグラフを描く際の参考になればいいなと思います.
- 他のレイアウトの公式ドキュメントはこちら
参考資料