2004-11-14
_ [Software] Graphvizで日本語グラフ表示
とあるどうでもよい事情でATTのGraphvizを使い日本語でグラフを書く必要が出てきた。オリジナルのはまだダメなようだが、WinGraphvizなんてのができていてマルチリンガルになっている。これはよさそうだと思ってダウンロードしてみたら実行形式は入っておらずライブラリのみ。VBScriptやPerlから使えるようになっているようだ。サンプルがVBScriptなのでしかたなく、「わかんねーよ」とかいいながらチョコチョコいじってファイルからdot形式を読んで、PNGでグラフを吐くスクリプトを作った。以下がそれ。
これをtest.vbsというファイル名でセーブし、graph.txtにDOT形式のグラフを用意して実行すればtest.PNGという絵が出来上がる。
'Create DOT Object
Dim dot
Set dot = CreateObject("Wingraphviz.dot")
if dot is Nothing then
Msgbox "Unable to load the object Wingraphviz.dot"
end if
'Set Codepage to SJIS
dot.Codepage = 932
'Read DOT file
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("graph.txt", 1)
strCMD2 = f.ReadAll
'Check DOT Format
if(not dot.Validate(strCMD2)) then
msgbox "DOT Format Error"
End if
'Generate BinaryImage(PNG)
Dim Img
Set Img = dot.ToPNG(strCMD2)
if Img is Nothing then
Msgbox "Unable to generate to PNG"
end if
Dim FilePath
FilePath = "test.PNG"
if Img.save(FilePath) then
Msgbox "BinaryImage Type is " + Img.Type + vbcrlf + _
"Save Image at " + FilePath
else
Msgbox "Unable to save image at " + FilePath
end if
'Release Resource
Set Img = Nothing
Set obj = Nothing
_ DOTファイルはSJISで書き、ラベルに日本語を書けばそれがそのまま表示される。他にもSVGを吐いてAdobeのSVGビューアと連携する使い方もあるらしいのだが、どうもうまくいかない。まあぼちぼちとやっていきますか。
READMEと日記の書き方
前に日本語の表示をさせたことがあります。<br>たしかGraphvizのソースファイルでフォントを参照している箇所を2,3変更しただけで、できましたよ。
そういう方法を紹介しているホームページも幾つかあったんだけど面倒なので止めました。WinGraphvizはPerlでdotを生成してグラフ表示するなどのアプリが簡単に作れるので良さそうです。