PythonのGraphviz グラフの設定#
公開日
この記事ではPythonのGraphvizでグラフを設定する方法を解説します。 グラフのタイトルや背景色、エッジの描画方法を設定できます。
グラフ設定の基本#
グラフの設定を変更する場合、作成したGraph
やDigraph
オブジェクトのattr()
メソッドを用います。
このメソッドの最初の引数をgraph
として、2番目以降の引数に属性と設定値を与えます。
from graphviz import Digraph
graph = Digraph()
graph.attr("graph", label="graph title") # タイトルの設定
graph.edge("1", "2")
graph
グラフのタイトル#
label
属性を指定することにより、グラフのタイトルを表示できます。
from graphviz import Graph
graph = Graph()
graph.attr("graph", label="graph title")
graph.edge("node1", "node2")
graph
位置#
タイトルの位置は、labeljust
(左右方向)、labelloc
(上下方向)で調節できます。
labeljust
l
: 左揃えc
: 中央揃えr
: 右揃え
labelloc
t
: 上側b
: 下側
graph = Graph()
graph.attr("graph", label="graph title", labeljust="l", labelloc="t")
graph.edge("node1", "node2")
graph.edge("node1", "node3")
graph
文字色#
タイトルの文字色をfontcolor
属性で指定できます。
graph = Graph()
graph.attr("graph", label="graph title", fontcolor="red")
graph.edge("node1", "node2")
graph
背景色#
背景色はbgcolor
属性で指定できます。
graph = Graph()
graph.attr("graph", bgcolor="gray")
graph.edge("node1", "node2")
graph
同一経路のエッジをまとめる#
concentrate
属性をtrue
に指定すると、同一経路のエッジをまとめて表示することができます。
concentrate
属性のデフォルト値はfalse
です。
以下に例を示します。
node1
とnode2
間の経路を2つ定義しています。
これをconcentrate="false"
(デフォルト値)としたとき、エッジが2本描画されます。
graph = Graph()
graph.attr("graph", concentrate="false")
graph.edge("node1", "node2")
graph.edge("node1", "node2") # 上の行と同じ経路
graph.edge("node1", "node3")
graph.edge("node2", "node4")
graph.edge("node3", "node4")
graph
このグラフに対してconcentrate="true"
とすると、以下の通りエッジは1本だけ描画されるようになりました。
graph.attr("graph", concentrate="true")
graph
エッジの線の種類#
splines
属性によってエッジの線の種類を指定できます。
指定できる線の種類は以下の通りです。
none
: 線なしline
: 直線polyline
: 折れ線curved
: 曲線ortho
: 直交する直線spline
: スプライン曲線
以下にそれぞれ例を示します。
graph = Graph()
graph.attr("graph", splines="none")
graph.edge("node1", "node2")
graph.edge("node1", "node3")
graph.edge("node1", "node4")
graph.edge("node2", "node5")
graph.edge("node1", "node5")
graph
graph.attr("graph", splines="line")
graph
graph.attr("graph", splines="polyline")
graph
graph.attr("graph", splines="curved")
graph
graph.attr("graph", splines="ortho")
graph
graph.attr("graph", splines="spline")
graph