Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

PythonのGraphviz グラフの設定

公開日 2024-10-27

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

グラフ設定の基本

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

from graphviz import Digraph

graph = Digraph()
graph.attr("graph", label="graph title") # タイトルの設定
graph.edge("1", "2")
graph
Loading...

グラフのタイトル

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

from graphviz import Graph

graph = Graph()
graph.attr("graph", label="graph title")
graph.edge("node1", "node2")
graph
Loading...

位置

タイトルの位置は、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
Loading...

文字色

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

graph = Graph()
graph.attr("graph", label="graph title", fontcolor="red")
graph.edge("node1", "node2")
graph
Loading...

背景色

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

graph = Graph()
graph.attr("graph", bgcolor="gray")
graph.edge("node1", "node2")
graph
Loading...

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

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
Loading...

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

graph.attr("graph", concentrate="true")
graph
Loading...

エッジの線の種類

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
Loading...
graph.attr("graph", splines="line")
graph
Loading...
graph.attr("graph", splines="polyline")
graph
Loading...
graph.attr("graph", splines="curved")
graph
Loading...
graph.attr("graph", splines="ortho")
graph
Loading...
graph.attr("graph", splines="spline")
graph
Loading...