PythonのGraphviz エッジの設定#
公開日
この記事ではPythonのGraphvizでエッジ(線)を設定する方法を解説します。 エッジのラベル、線の種類、色、矢印の向きや先端形状を設定できます。
エッジ設定の基本#
エッジの設定方法には、グラフ全体でまとめて変更する方法と、個別のエッジ設定を変更する方法の2つがあります。
グラフ全体でまとめて変更する場合、グラフオブジェクトのattr()
メソッドを使用します。attr()
メソッドの第1引数を"edge"
として、第2引数以降に設定を記述します。以下に例を示します。
from graphviz import Digraph
graph = Digraph()
graph.attr("edge", color="red", style="dashed")
graph.edge("node1", "node2")
graph.edge("node1", "node3")
graph
一方、個別のエッジごとに設定する場合、以下のようにグラフオブジェクトのedge()
メソッドに設定を記述します。
graph = Digraph()
graph.edge("node1", "node2", color="red", style="dashed")
graph.edge("node1", "node3")
graph
以降では、エッジに設定可能な項目を解説します。
ラベル#
エッジのラベルはedge()
メソッドのlabel
オプションで追加できます。
graph = Digraph()
graph.edge("node1", "node2", label="label")
graph
ラベルの表示には以下のオプションが指定できます。
fontcolor
: 文字の色fontsize
: 文字サイズfontname
: フォントの種類
graph = Digraph()
graph.edge("node1", "node2", label="label", fontcolor="red", fontsize="20", fontname="Arial")
graph
エッジの根本側と先端側にラベルを追加する場合、headlabel
, taillabel
オプションを使用します。
graph = Digraph()
graph.edge("node1", "node2", headlabel="headlabel", taillabel="taillabel")
graph
線の種類#
エッジの線の種類はstyle
で指定できます。
以下の4種類があります。
graph = Digraph()
graph.attr('graph', rankdir="LR")
graph.edge("1", "2", style="solid", label="solid") # 実線
graph.edge("2", "3", style="dashed", label="dashed") # 破線
graph.edge("3", "4", style="dotted", label="dotted") # 点線
graph.edge("4", "5", style="bold", label="bold") # 太線
graph
線の色#
エッジの線の色はcolor
で指定できます。
graph = Digraph()
graph.edge("node1", "node2", color="red")
graph
矢印の向き#
エッジの矢印の向きはdir
オプションで指定できます。
以下の4種類があります。
graph = Digraph()
graph.attr('graph', rankdir="LR")
graph.edge("1", "2", dir="forward", label="forward") # 順方向
graph.edge("2", "3", dir="back", label="back") # 逆方向
graph.edge("3", "4", dir="both", label="both") # 両方向
graph.edge("4", "5", dir="none", label="none") # なし
graph
矢印の先端形状#
エッジの矢印の先端形状はarrowhead
(先端側)、arrowtail
(根本側)でそれぞれ指定できます。
graph = Digraph()
graph.attr('graph', rankdir="LR")
graph.edge("1", "2", arrowhead="normal", label="normal")
graph.edge("2", "3", arrowhead="open", label="open")
graph.edge("3", "4", arrowhead="crow", label="crow")
graph.edge("4", "5", arrowhead="none", label="none")
graph
graph = Digraph()
graph.attr('graph', rankdir="LR")
graph.edge("1", "2", arrowhead="dot", label="dot")
graph.edge("2", "3", arrowhead="odot", label="odot")
graph.edge("3", "4", arrowhead="invdot", label="invdot")
graph.edge("4", "5", arrowhead="invodot", label="invodot")
graph
graph = Digraph()
graph.attr('graph', rankdir="LR")
graph.edge("1", "2", arrowhead="empty", label="empty")
graph.edge("2", "3", arrowhead="invempty", label="invempty")
graph.edge("3", "4", arrowhead="diamond", label="diamond")
graph.edge("4", "5", arrowhead="odiamond", label="odiamond")
graph
graph = Digraph()
graph.attr('graph', rankdir="LR")
graph.edge("1", "2", arrowhead="inv", label="inv")
graph.edge("2", "3", arrowhead="tee", label="tee")
graph.edge("3", "4", arrowhead="halfopen", label="halfopen")
graph
graph = Digraph()
graph.attr('graph', rankdir="LR")
graph.edge("1", "2", arrowhead="curve", label="curve")
graph.edge("2", "3", arrowhead="icurve", label="icurve")
graph