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(上下方向)で調節できます。
labeljustl: 左揃えc: 中央揃えr: 右揃え
labelloct: 上側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