Pythonを用いたgraphviz

はじめに

graphvizはグラフ理論のイラストを描画するためのツールです。
今回はPythonを用いてgraphvizを利用します。
使い方は以下のサンプルコードを見ながら理解していって下さい。
私の動作環境はCoCalcです。

Hello World

# sample_01.py
# Hello-World
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定

# 節点を追加
g.node('Hello')
g.node('World')

# 枝を追加
g.edge('Hello', 'World')

# グラフを出力
g.render('output')

特定の節点を塗りつぶす

# sample_02.py
# 特定の節点を塗りつぶす
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定

# 節点を追加
g.node('Hello')
g.node('World', style='filled', fillcolor='pink')

# 枝を追加
g.edge('Hello', 'World')

# グラフを出力
g.render('output')

全ての節点を円にする

# sample_03.py
# すべての節点を円にする
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定

# すべての節点を円にする
g.attr('node', shape='circle')

# 節点を追加
g.node('Hello')
g.node('World')

# 枝を追加
g.edge('Hello', 'World')

# グラフを出力
g.render('output')

すべての枝を太くする

# sample_04.py
# すべての枝を太くする
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定

# すべての枝を太くする
g.attr('edge', penwidth='10')

# 節点を追加
g.node('A')
g.node('B')
g.node('C')

# 枝を追加
g.edge('A', 'B')
g.edge('B', 'C')

# グラフを出力
g.render('output')

特定の枝の色を変える

# sample_05.py
# 特定の枝の色を変える
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定

# 節点を追加
g.node('A')
g.node('B')
g.node('C')

# 枝を追加
g.edge('A', 'B', color='blue')
g.edge('B', 'C', color='red')

# グラフを出力
g.render('output')

特定の枝を2重3重にする

# sample_06.py
# 特定の枝を2重3重にする
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定

# 節点を追加
g.node('A')
g.node('B')
g.node('C')

# 枝を追加
# 枝を2重にする
g.edge('A', 'B')
g.edge('A', 'B')
# 枝を3重にする
g.edge('B', 'C')
g.edge('B', 'C')
g.edge('B', 'C')

# グラフを出力
g.render('output')

すべての節点ラベルをBにする

# sample_07.py
# すべての節点ラベルをBにする
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定

# すべての節点ラベルをBにする
g.attr('node', label='B')

# 節点を追加
g.node('x')
g.node('y')
g.node('z')

# 枝を追加
g.edge('x', 'y')
g.edge('y', 'z')

# グラフを出力
g.render('output')

カラースキームを用いて枝の色を変更する

# sample_08.py
# カラースキームを用いて枝の色を変更する
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定

# 枝にカラースキームを用いる
g.attr('edge', colorscheme='paired12')

# 節点を追加
g.node('x')
g.node('y')
g.node('z')

# 枝を追加
g.edge('x', 'y', color='2')
g.edge('y', 'z', color='4')

# グラフを出力
g.render('output')

最小枝長を設定する

# sample_09.py
# 最小枝長を設定する
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定

# 節点を追加
g.node('x')
g.node('y')
g.node('z')

# 枝を追加
g.edge('x', 'y')
# 最小枝長を設定
g.edge('y', 'z', minlen='3')

# グラフを出力
g.render('output')

上下逆さまに表示する

# sample_10.py
# 上下逆さまに表示する
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定

# 上下逆さまに表示する
g.attr(rankdir='BT') # bottom to top

# 節点を追加
g.node('x')
g.node('y')
g.node('z')

# 枝を追加
g.edge('x', 'y')
g.edge('y', 'z')

# グラフを出力
g.render('output')

節点のフォントサイズを設定する

# sample_11.py
# 節点のフォントサイズを設定する
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定

# 節点を追加
g.node('x', fontsize='16')
g.node('y', fontsize='32')
g.node('z', fontsize='64')

# 枝を追加
g.edge('x', 'y')
g.edge('y', 'z')

# グラフを出力
g.render('output')

節点を小さくする

# sample_12.py
# 節点を小さくする
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定
# 節点の形を円にする
g.attr('node', shape='circle')
g.attr('node', fixedsize='true')

# 節点を追加
g.node('x', width='0.3', height='0.3')
g.node('y', width='0.5', height='0.5')
g.node('z', width='0.8', height='0.8')

# 枝を追加
g.edge('x', 'y')
g.edge('y', 'z')

# グラフを出力
g.render('output')

正四面体

# tetra.py
# 正四面体
from graphviz import Graph

# [1] グラフ全体の設定
# [1.1] 全体の設定
g = Graph() # 無向グラフを生成
g.format = 'svg' # ファイルフォーマットを設定
g.engine = 'twopi'

# [1.2] 全節点の設定
# 節点にカラースキームを用いる
g.attr('node', colorscheme='paired12')
# 節点内部を塗りつぶす
g.attr('node', style='filled')
# 節点の形を円にする
g.attr('node', shape='circle')
# 節点のフォントサイズを設定
g.attr('node', fontsize='16')
# 節点を小さくする
g.attr('node', width='0.3', height='0.3')
g.attr('node', fixedsize='true')
# 節点のラベルをBにする
#g.attr('node', label='B')

# [1.3] 全枝の設定
# 枝を太くする
g.attr('edge', penwidth='10')
# 枝にカラースキームを用いる
g.attr('edge', colorscheme='paired12')

# [2] 各節点の設定
g.node('1', fillcolor='2')
g.node('2', fillcolor='6')
g.node('3', fillcolor='6')
g.node('4', fillcolor='2')

# [3] 各枝の設定
g.edge('1', '2', color='6')
g.edge('1', '3', color='2')
g.edge('1', '4', color='6')
g.edge('2', '3', color='2')
g.edge('2', '4', color='2')
g.edge('3', '4', color='6')

# グラフを出力
g.render('tetra')

枝ラベルの色を設定する

# sample_13.py
# 枝ラベルの色を設定する
from graphviz import Graph

g = Graph() # 無向グラフを生成
g.format = 'jpeg' # ファイルフォーマットを設定

# 節点を追加
g.node('x')
g.node('y')
g.node('z')

# 枝を追加
g.edge('x', 'y', label='bridge', fontcolor='blue')
g.edge('y', 'z', label='over', fontcolor='green')

# グラフを出力
g.render('output')

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です