Graphvizのノードでアンダーライン(下線)を使う

Graphvizのノード内でアンダーライン(下線)を使おうと思ったのですが、どうやらサポートされていないようです。(version 2.26.3) それらしい出力が得られるように試行錯誤したので、その過程をメモしておきます。なお、最終的には満足できる出力が得られました。


まずは、アンダーラインなしの場合です。

graph test_graph {
    node [fontname = "MS UI Gothic"];
    
    test_node [label = "アンダーライン"];
}


最初の試みとして、HTMLライクなラベルで<u>タグが使えないか確認しましたが、やはりダメでした。

graph test_graph {
    node [fontname = "MS UI Gothic"];
    
    test_node [label = <<u>アンダーライン</u>>];
}


なんとか他の方法がないかと考えた結果、ノード名の次の行にオーバーラインを並べることを思いつきました。

graph test_graph {
    node [fontname = "MS UI Gothic"];
    
    test_node [label = "アンダーライン\n ̄ ̄ ̄ ̄ ̄ ̄"];
}


それらしい出力にはなったのですが、ラインの切れ目が気になります。そこで、フォントサイズを調整したところ、ラインがつながって出力されるようになりました。たぶん、フォント名とフォントサイズの組み合わせが影響するのだと思います。

graph test_graph {
    node [fontname = "MS UI Gothic", fontsize = 15];
    
    test_node [label = "アンダーライン\n ̄ ̄ ̄ ̄ ̄"];
}


どうもノードのサイズが気になります。そこで、fixedsize、width、heightを指定しました。

graph test_graph {
    node [fontname = "MS UI Gothic", fontsize = 15];
    
    test_node [
        label = "アンダーライン\n ̄ ̄ ̄ ̄ ̄", 
        fixedsize, width = 1.5, height = 0.6
    ];
}


文字が上に寄っていて気になります。そこで、文字の前に空行を挿入して、上下の位置を微調整しました。ここまでやって、いちおう満足できる出力になりました。

graph test_graph {
    node [fontname = "MS UI Gothic", fontsize = 15];
    
    test_node [
        label = "\nアンダーライン\n ̄ ̄ ̄ ̄ ̄", 
        fixedsize, width = 1.5, height = 0.6
    ];
}


最後に、この方法でアンダーラインを出力する場合のポイントをまとめておきます。

  • fontnameに日本語フォント名を指定する。
  • ノード名の前に空行、ノード名の後にオーバーラインを並べた行を挿入する。
  • ラインがつながって出力されない場合は、フォントサイズを調整する。
  • ノードのサイズは、fixedsizeを使って指定する。


関連記事:Graphvizで日本語を使う