10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonでGraphvizを用いて有向グラフを作成した時のメモ

Last updated at Posted at 2020-05-09

PythonでGraphvizを用いて有向グラフを作成した時のメモ

動作環境

  • Windows10 (64bit)
  • Python 3.8.1
  • Graphviz 2.38

環境構築

まずは Windows に Graphviz をインストールする.

https://graphviz.gitlab.io/_pages/Download/Download_windows.html

今回は msi の方をダウンロードした.
ダウンロード後実行し,ウィザードに従ってインストールする.
インストール後,パスを通しておく.

次に pip で graphviz をインストールする.

pip install graphviz

実際にやってみる

まずは簡単なものから.

コードの例
from graphviz import Digraph

graph = Digraph(format="png")

# ノードを追加
graph.node("node1")
graph.node("node2")
graph.node("node3")
graph.node("node4")

# 辺を追加
graph.edge("node1", "node2")
graph.edge("node1", "node3")
graph.edge("node2", "node4")
graph.edge("node3", "node4")

# 画像を保存
# 拡張子はいらない
graph.render("image/output")

# 画像を表示
graph.view()
出力

output.png

コードの説明
from graphviz import Digraph

graph = Digraph(format="png")

有向グラフを作成するため,Digraph をインポートする.
png の他に,pdf や svg などでも出力できる.

# ノードを追加
graph.node("node1")
graph.node("node2")
graph.node("node3")
graph.node("node4")

ノードを作成する.与えた引数がノードの中に描かれる.

# 辺を追加
graph.edge("node1", "node2")
graph.edge("node1", "node3")
graph.edge("node2", "node4")
graph.edge("node3", "node4")

辺を作成する.第1引数→第2引数の向きに矢印が付く.

以下のように,ノードを作成していなくてもここで指定すれば新たにノードが作成される.

# 辺を追加
graph.edge("node1", "node2")
graph.edge("node1", "node3")
graph.edge("node2", "node4")
graph.edge("node3", "node4")
# 作成していないノードを指定
graph.edge("A", "B")

出力は以下のようになる.
output.png

グラフの見た目を変える

ノードの形状や色を変えることができる.

形状の変更

コードの例
from graphviz import Digraph

graph = Digraph(format="png")

# ノードを追加
graph.attr("node", shape="square") # 形を正方形にする
graph.node("node1")
graph.node("node2")

graph.attr("node", shape="star") # 形を星形にする
graph.node("node3")
graph.node("node4")

graph.node("node5", shape="circle") # 個別に設定可能
graph.node("node6")

# 辺を追加
graph.edge("node1", "node2")
graph.edge("node1", "node3")
graph.edge("node2", "node4")
graph.edge("node3", "node4")
graph.edge("node4", "node5")
graph.edge("node4", "node6")

# 画像を保存
# 拡張子はいらない
graph.render("image/output2")

# 画像を表示
graph.view()
出力

output2.png

コードの説明
# ノードを追加
graph.attr("node", shape="square") # 形を正方形にする
graph.node("node1")
graph.node("node2")

graph.attr("node", shape="star") # 形を星形にする
graph.node("node3")
graph.node("node4")

graph.node("node5", shape="circle") # 個別に設定可能
graph.node("node6")

attr メソッドを用いるとすべてのノードの設定を変更できる.

shape="(形)"とすると形を指定できる.

ノードの作成時に形を指定すると,そのノードの設定のみを変更できる.

色の変更

コードの例
from graphviz import Digraph

graph = Digraph(format="png")

# 見た目の設定
graph.attr("node", style="filled", fillcolor="black", color="red") # ノードの色設定
graph.attr("edge", color="cyan") # 辺の色設定

# ノードを追加
graph.node("node1", style="filled", fillcolor="palegreen", fontcolor="blue")
graph.node("node2", style="filled", fillcolor="yellow")
graph.node("node3", fontcolor="magenta")
graph.node("node4", style="filled", fillcolor="#808080")
graph.node("node5", fontcolor="white")


# 辺を追加
graph.edge("node1", "node2")
graph.edge("node1", "node3")
graph.edge("node2", "node4")
graph.edge("node3", "node4")
graph.edge("node3", "node5")

# 画像を保存
# 拡張子はいらない
graph.render("image/output3")

# 画像を表示
graph.view()
出力

output3.png

コードの説明
# 見た目の設定
graph.attr("node", style="filled", fillcolor="black", color="red") # ノードの色設定
graph.attr("edge", color="cyan") # 辺の色設定

# ノードを追加
graph.node("node1", style="filled", fillcolor="palegreen", fontcolor="blue")
graph.node("node2", style="filled", fillcolor="yellow")
graph.node("node3", fontcolor="magenta")
graph.node("node4", style="filled", fillcolor="#808080")
graph.node("node5", fontcolor="white")

形を変えた時のように,attr メソッドを用いることで全体の設定をすることができる.第1引数を"node""edge"とすることで,ノードや辺の設定ができる.

塗りつぶす場合はstyle="filled"fillcolor="(色)"とする.
文字の色を変更する場合はfontcolor="(色)"とする.
色はカラーコードで指定することもできる.

ノードを作成するときに個別に設定することもできる.

参考

Python上でGraphvizを使って綺麗なグラフを描く

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?