PythonのGraphviz グラフの設定#

公開日

この記事ではPythonのGraphvizでグラフを設定する方法を解説します。 グラフのタイトルや背景色、エッジの描画方法を設定できます。

グラフ設定の基本#

グラフの設定を変更する場合、作成したGraphDigraphオブジェクトのattr()メソッドを用います。 このメソッドの最初の引数をgraphとして、2番目以降の引数に属性と設定値を与えます。

from graphviz import Digraph

graph = Digraph()
graph.attr("graph", label="graph title") # タイトルの設定
graph.edge("1", "2")
graph
../_images/7aa5c8fdf9adce8471a3f39fa93db74c322fea2e5e8251b36b6a294918dbf77d.svg

グラフのタイトル#

label属性を指定することにより、グラフのタイトルを表示できます。

from graphviz import Graph

graph = Graph()
graph.attr("graph", label="graph title")
graph.edge("node1", "node2")
graph
../_images/f827fe8672bff32fe7edd0f5cde53487787d9ac2150783e5b135d267f43aca8f.svg

位置#

タイトルの位置は、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
../_images/56aee01f87e143b396d300cd03bb59d01bd120543f27801a4f6f6ea57e8eeff2.svg

文字色#

タイトルの文字色をfontcolor属性で指定できます。

graph = Graph()
graph.attr("graph", label="graph title", fontcolor="red")
graph.edge("node1", "node2")
graph
../_images/61cd86e7c5b235ba943ba2c6e2003cbbd1db903673d23e3e34aacab9e9ee2103.svg

背景色#

背景色はbgcolor属性で指定できます。

graph = Graph()
graph.attr("graph", bgcolor="gray")
graph.edge("node1", "node2")
graph
../_images/d3753bc45fc8c2e06d05cbdc0a2c4829cf26ec6514e9036a326bbf07241fd893.svg

同一経路のエッジをまとめる#

concentrate属性をtrueに指定すると、同一経路のエッジをまとめて表示することができます。 concentrate属性のデフォルト値はfalseです。

以下に例を示します。 node1node2間の経路を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
../_images/170713b724708f1cf07aab3b4e6280a6e8b4c422474ac94be97e4bf867d75564.svg

このグラフに対してconcentrate="true"とすると、以下の通りエッジは1本だけ描画されるようになりました。

graph.attr("graph", concentrate="true")
graph
../_images/96a0e7a9021336a0678045f7c8a84212c23616d13d6bbafe206c56c22be243f9.svg

エッジの線の種類#

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
../_images/dfdb2e2a5757262ad77b9c17217984ec980585be880ec2d05533e978fa4c08bf.svg
graph.attr("graph", splines="line")
graph
../_images/ecc4dae8dd0da69bd86944494364533ae0ed33c683d996be46ef40595be567c8.svg
graph.attr("graph", splines="polyline")
graph
../_images/2834be2f61b93a96a68b6ba3c401e75a9d26175788861521a7cfb9da5d4874f4.svg
graph.attr("graph", splines="curved")
graph
../_images/a5d4a61bd4289cb9c9d1d11daa127f149130978bf5e192aac7f57829ce8d7841.svg
graph.attr("graph", splines="ortho")
graph
../_images/6cfc5c1c800bcd6871440c6b5ef2173ba38ec5c946067536171054be39be5d67.svg
graph.attr("graph", splines="spline")
graph
../_images/5373e5e3e4cf214164cf11bd578648d969ff8314b817982581fb1c425f8f78e1.svg