Graphvizで日本語を使う (Graphviz version 2.26.3)

Graphvizで日本語を使う場合の注意点をメモしておきます。対象バージョンは、2.26.3(最新の安定版)です。前半はOS非依存の話、後半は主にWindowsでの話です。

エンコーディング

現在、Graphvizがサポートするエンコーディングは、

  • UTF-8
  • iso-8859-1 (Latin1)

の2つです。*1 Graphvizで日本語テキストを扱う場合、必然的にUTF-8を選択することになります。なお、UTF-8はデフォルトのエンコーディングですので特に指定する必要はないのですが、graphの属性として明示的に指定することも可能です。

...
    graph [charset="UTF-8", ...];
...

フォント名を指定する対象

日本語テキストを使用する場合は、日本語フォントを指定する場合が多いと思います。Graphvizでは、グラフ、ノード、エッジのそれぞれに対してフォント指定が可能です。ここで注意が必要なのは、これらのフォント指定が独立しているという点です。例えば、グラフに対してフォントを指定しても、そのグラフ内のノードやエッジには影響を与えません。「日本語フォントを指定しているはずなのに、なぜかノードの文字が文字化けする」というような時は、ノードに対するフォント指定を忘れていないか、チェックしてみるとよいでしょう。

利用可能なフォント名

ここからは、主にWindows環境の話になります。Windows版のGraphvizで日本語テキストを使用する場合、明示的に日本語フォント名を指定しないと出力ファイルで文字化けするようです。*2

Windows XP SP3でいろいろなフォント名を試してみたところ、以下の日本語フォントが使用可能でした。

  • MS UI Gothic
  • MS ゴシック
  • MS 明朝
  • IPA ゴシック (要インストール)
  • IPA Pゴシック (要インストール)
  • IPA明朝 (要インストール)
  • IPA P明朝 (要インストール)

上記のフォント名を一通り使った入力データと、その出力画像です。

digraph G {
    graph [ranksep=0.0]
    node [shape=box, fontsize=18, sizefixed, width=3.0]
    edge [style=invis]
    n1->n2->n3->n4->n5->n6->n7
    
    //MS UI Gothic
    n1 [label="日本語 (MS UI Gothic)", fontname="MS UI Gothic"]
    
    //MS ゴシック
    n2 [label="日本語 (MS ゴシック)", fontname="MS ゴシック"]
    
    //MS 明朝
    n3 [label="日本語 (MS 明朝)", fontname="MS 明朝"]
    
    //IPA ゴシック (要インストール)
    n4 [label="日本語 (IPAGothic)", fontname="IPAGothic"]
    
    //IPA Pゴシック (要インストール)
    n5 [label="日本語 (IPAPGothic)", fontname="IPAPGothic"]
    
    //IPA明朝 (要インストール)
    n6 [label="日本語 (IPAMincho)", fontname="IPAMincho"]
    
    //IPA P明朝 (要インストール)
    n7 [label="日本語 (IPAPMincho)", fontname="IPAPMincho"]
}

「MS ゴシック」と「MS 明朝」は、「MS」が全角、その後のスペースが半角である点に注意してください。また、「MS Pゴシック」と「MS P明朝」は使えませんでした。

下の4つのフォントは、IPA(情報処理推進機構)が配布している、IPAフォントです。使用する場合はインストールが必要です。fontnameに指定する文字列が、フォント名ともフォントファイル名とも違っているので注意が必要です。

太字(bold)と斜体(italic)

fontnameの最後に「Bold」や「Italic」を付けると、太字や斜体にすることができます。区切り文字は、半角スペースです。この点は、日本語フォントでも同じです。

digraph G {
    graph [ranksep=0.0]
    node [shape=box, fontsize=18, sizefixed, width=5.0]
    edge [style=invis]
    n1->n2->n3->n4
    
    n1 [label="日本語 (MS ゴシック)", fontname="MS ゴシック"]
    n2 [label="日本語 (MS ゴシック Bold)", fontname="MS ゴシック Bold"]
    n3 [label="日本語 (MS ゴシック Italic)", fontname="MS ゴシック Italic"]
    n4 [label="日本語 (MS ゴシック Bold Italic)", fontname="MS ゴシック Bold Italic"]
}


チェックリスト

最後に、Graphvizで日本語出力がうまくいかない場合のチェックリストをまとめておきます。

  • DOTファイルのエンコーディングUTF-8にしているか?
  • グラフ、ノード、エッジのそれぞれに対し、適切なフォント名が指定されているか?
  • 使用可能なフォント名を指定しているか?
  • フォント名の指定を間違えていないか? (半角・全角の違い、スペースの有無など)

*1:http://www.graphviz.org/doc/info/attrs.html#d:charset

*2:ちなみに、Ubuntu 8.0.4では日本語フォント名の指定が不要でした。詳細は未確認ですが...。