|
カテゴリ:Python
グラフ図を書きたくなったので、pydot がどの程度使えるか調べてみる。
こんな図とか、こんな図とか Python のプログラムから描けたらいいなと。この図は Graphviz - Graph Visualization Software で描かれたもので、この Python のラッパーとなるのが pydot。pydot のオリジナルの作者のサイト を見ると pydot - Python interface to Graphviz's Dot language(Google code) をメインにするよということなので、そちらを中心に見る。でもドキュメントは pydot (version 0.9.10): Graphviz's dot language Python interface でオリジナルサイトにあったりする。現状、まだ、オリジナルサイトの方が情報が多い。 必要なもの
Windows の場合、標準の Python ではなく、Python Enthought Edition とかインストールしておくと、Graphviz や pyparsing、pydot が最初からインストールされているので楽だったりする。インストールされていない環境の場合は個別にインストールする。残念ながら pydot は easy_install に対応していない。ん、pypi も pydot の URL がまだ dkbza.org(オリジナルのサイト) で Google Code に移行していない。pydot のダウンロードはここから。
なお、注意点としては、Graphviz のバイナリ (fdp, twopi, neato, dot, circo) があるディレクトリをパスに追加しておくこと。そうしないと使えない。Enthought の場合は、\Python24\Enthought\Graphviz\bin が PATH に追加されているはずなので特に問題なし。もし、使えない場合は PATH をチェック。 実際に使ってみる。とりあえず、まずは動くかどうかを http://dkbza.org/pydot.htmlと同じようにしてテスト。
無事に表示される。では日本語を入れるとどうなるだろうかとやってみる。数字ではなく、文字列を入れるとアルファベットは表示されるが、日本語は文字化けしてしまう。
さて、文字化けする原因はどこにあるか。とりあえず Graphviz が日本語が通るか見てみる。Graphviz 簡単な使い方 を見ると、
が書かれていた。一つはdotファイルをUTF-8で書いて、フォントの指定をすること。もう一つは、lefty を改造して Shift_JIS に対応したパッチを当てたものを使う方法が書かれている。UTF-8 でいいので、前者を試すことにする。pydot.py の末尾 class Dot の def create を見てみると、
と、テンポラリファイルに dot ファイルを書き出しておいて、popen3 で Graphviz のプログラムを呼び出してそのファイルを処理させているようなので、書き出すところでフォントの指定を入れてやればよいかな、と思ったら、各クラスをよく見たら、fontpath とか fontname の attribute を持たせられるようになっているので、そこで指定してやればよいか。で、次のようにしてみる。
ところが、これでは文字化けのまま。原因を探るために、試しに、dot ファイルをまず手で書いてみる。
test.dot ファイルに上記を入れておいて実行してみる。
これだと、ちゃんと日本語が表示される。pydot から出力されているファイルを見ると、次のようになっている。node の属性がベタに書き出されていて、ちゃんとリストになっていないからなのかな。
試しに手書きで、node [fontsize=10, fontname="arialuni.ttf"] と書き換えてやると、日本語が表示できるようになった。ということで node を作って、そこに属性を指定することにした。が、g.add_node でそのノードを追加すると一番最後に追加されてダメなので、pydot.py の class Graph の def add_node の中を書き換えてみるとちゃんと日本語が表示されるようになった。、
なんだか強引なやり方だが、とりあえず pydot で日本語が出せた。適当なことをやっているので副作用があるかもしれない。というか、ドキュメントちゃんと読んだら、もっとちゃんとした使い方があるのかもしれないが、面倒なのでとりあえず。あとで Google で探してみるかな。まあ、とりあえず日本語が使えることは確認できたのでよしとする。
お気に入りの記事を「いいね!」で応援しよう
[Python] カテゴリの最新記事
ちゃんと見てみたら、パッチを当てなくても、ノードごとにフォントの設定をすれば日本語が出せた。ただし、ノードごとに属性を付けるために dot ファイルは大きくなる。まとめて同じ属性を付けるのならば上記のやり方でいいかもしれない。パッチを当てないで日本語を出す書き方はまた別のエントリで書く。
(2007.11.08 01:02:11)
Python から Graphviz を使う( pydot を日本語で出力)(2)
http://plaza.rakuten.co.jp/kugutsushi/diary/200711110000/ (2007.11.11 06:30:15)
Hello, im a chinese girl who have just started the journey of python learning.
hehe! its exciting to see some docs on pydot written in japanese! Although i cant tell much from your writing since I dont speak Japanese. But still thanks for your great work, and I hope in the future I am able to read japanese.Because there's so much we can learn from Japan. (2012.02.02 23:40:24)
Leviteracetam Shopping http://abcialisnews.com - Cialis Amoxicillin And Reactive Hypoglycemia <a href=http://abcialisnews.com>Cialis</a> Cephalexin Sulfa
(2020.02.08 12:24:31)
Purchase Orlistat http://viacialisns.com/# - Buy Cialis Buy Now Amoxicilina No Script Needed <a href=http://viacialisns.com/#>Buy Cialis</a> Prix Du Viagra Pfizer
(2020.02.09 10:49:34)
|