歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【Python】networkx + PyGraphvizで有向非巡回グラフ(Directed acyclic graph)をプロットする

昨日書いたコードで、「有向非巡回グラフ(Directed acyclic graph)をきれいにプロットする」ということが課題として残っていました。

ところが、よく考えたらDAGはワークフローエンジン等でよく使われている概念で、ワークフローエンジンで、タスクの順番をきれいに可視化する機能はよくあります。

例えば、以下の記事でも次のような紹介があります。

qiita.com

ジョブ依存関係の可視化

Hashだけだとジョブの全体図が分かり辛いのでgraphviz形式でジョブの全体図を出力できます。

graphサブコマンドにジョブネットのクラス名を渡します

上で使われているGraphvizを使えば、自分のグラフもきれいにプロットできそうです。調べたところ、networkxからPyGraphvizライブラリを経由してGraphvizを呼び出せることがわかりました。

qiita.com

Drawing — NetworkX 1.11 documentation

OS Xでは以下の2行でインストールできました。

brew install graphviz
pip install pygraphviz

これを使えば、簡単にDAGがプロットできます。画像はフィクションです。

f:id:takeshi0406:20170627003101p:plain