Graphvizでノードの外側にラベルを表示する

Graphvizは、ノードの外側にラベルを表示する機能を持っていません。しかし、何とかそれらしい見た目のグラフを生成できないか試行錯誤したので、その結果をメモしておきます。動作確認に使用したバージョンは、2.26.3(最新の安定版)です。

基本方針
  • 各ノードをサブグラフで囲む。*1
  • サブグラフのラベルを左上に表示し、ノードのラベルのように見せかける。
  • サブグラフで「penwidth=0」を指定し、サブグラフの枠線を非表示とする。 *2
DOTファイル
digraph G {
    graph [rankdir=LR]
    node [shape=box]
    
    subgraph cluster1 {
        labelloc=t //t:top, b:bottom
        labeljust=l //l:left, c:center, r:right
        penwidth=0
        label="E1"
        E1 [label="Node"]
    }
    
    subgraph cluster2 {
        labelloc=t //t:top, b:bottom
        labeljust=l //l:left, c:center, r:right
        penwidth=0
        label="E2"
        E2 [label="Node"]
    }
    
    E1 -> E2
}
生成されたグラフ


その他

ラベルとノードをもっと近づけたかったのですが、うまい方法が見つかりませんでした。

*1:サブグラフの名前は、「cluster」で始まる必要があります。

*2:「style=invis」は使えません。枠線だけでなくラベルも非表示になります。