|
カテゴリ:Python
AT&T が開発したグラフ描画ツール Graphviz を Python から使いたいと思って、いろいろ調べている最中。
とりあえず、pydot で日本語が出せるのは確認できた(別のやり方は後に書く)、pyGraphviz というのもあるのを知る。ロスアラモス研究所 で開発されていて、グラフ操作のための networkx と、グラフ描画のための pyGraphviz という感じのようだ。つまり、AT&T (Graphviz) + ロスアラモス研究所 (networkx) = グレートって感じ。こうしてアメリカに洗脳されていく。。。。。 networkx は easy_install でインストールできるが、問題は pyGraphviz。これは Windows のバイナリがないために自分でコンパイルしなければならない。まだ Windows でのバイナリはなく、動くようになったら教えてねという感じ。 がんばればできないことはないと思うが、コンパイルできる環境を整えるのが面倒なのでとりあえず諦める。理屈上は、setup の中で dotneato-config を始めとしたライブラリパスやインクルードパスを取得するスクリプトの類が Windows 環境では動かないので、この部分を手で指定してやるところからスタートしてコンパイルできない原因を一つずつつぶしていく感じになるだろう。がんばればできないことはないとは思う。けど面倒だ。 とりあえずの印象として、pydot に比べると、networkx がグラフを操作するためのライブラリとしては使い勝手が良さそうで、サンプルも豊富。pydot にはそういう高度な部分が基本的にはなくて、あくまでも dot ファイルをゴリゴリと生成してグラフを描画するという低レベルのライブラリ。pyGraphviz は、networkx との連携を考えて作られていて使いやすそう。高度なグラフの操作 (networkx)と描画 (PyGrapnviz) と役割分担ができているから広がりを感じる。 gallary なんか見ても、これなら PyGraphviz 使うかなぁという気になる。一番大きな違いは pydot が Pure Python のモジュールで、dot ファイルを生成したら グラフの描画は外部の Graphviz のコマンドを呼び出している点。これに対して、PyGraphviz は Graphviz のライブラリのラッパが C で書かれていて拡張モジュールになっている点。たくさん処理するのであれば、dot ファイルを毎回裏側でファイル出力しない PyGraphiz の方が処理速度の点でも有利なはずだし、Graphviz がフルに使える感じ。gallery: minard.png など、おぉーって感じ。minard.py 程度のコーディングでこれが描ける。gallery: chess_masters_graph.png は、chess_masters.py ぐらい。とってもいい感じ。 ちなみに、pydot は開発が止まっているような感じだが、networkx と PyGraphviz は頻繁にアップデートされているようだ。Windows で PyGraphviz が使えるようになったら乗り換えようかな。。。。いずれは、このライブラリを使いたい。Windows と *nix の両方で簡単に使えるものが好きなので。 でも、とりあえず dot ファイルを書き出すという pydot でどの程度までいけるかを試してみる。 まず、Windows 環境で dot ファイルから Graphviz のコマンドを使って、ちゃんと描画できるのかなという点をチェック。これがそもそもできていないと失望するから。Graphviz Galley にあるサンプルをとりあえず dot コマンドで描画させてみる。だいたいのものが描けるが、twopi2 を描画させようとすると、次のようにエラーになってしまう。Windows 上では JPEG ライブラリが 65500 pixels を超えるものは扱えないということか。考えてみたら jpg 使わずに gif とか png 使えばいいのねと試してみると、gif や png ならちゃんと描画できた。dot -Ktwopi -Tgif sample11.dot -o sample11.gif とかすればいい。
fdpclust と、process と softmaint などもレイアウトエンジンを dot コマンドを使うときに指定してやらないと表示が同じようにならない。-K オプションで circo, dot, fdp, neato, twopi のどれかを指定すれば同じように表示できるようだ。dot がデフォルト。dot コマンドのオプションを把握しないといけないな。とりあえず、dot(有向グラフ)、neato(無向グラフ)が基本で、circo(環状レイアウト)、towpi(放射状のレイアウト)、fdp(無向グラフ) と。Graphviz (Wikipedia 参照) Graphviz Galley にあるレベルであれば dot ファイルを書き出すタイプの pydot でも、対応できないこともない感じなので、実際に、pydot を使って、それらの dot ファイルを生成できるかを試していこうかと思う。同時に日本語がそのときに出せるかについても。ちなみに Graphviz のニュースのページ を見たら Ajax で Graphviz とか公開している日本人の方がいらっしゃる。Graphviz をちょっと試してみるのにいいかも。加えて、canviz: graphviz on a canvas を見ると、簡単にどんなグラフが描けるか確認できる。同じ dot ファイルでも、レイアウトエンジンの指定によって表示が変わるのも簡単に確認できる。 ZGRViewer, a GraphViz/DOT Viewer はすごいな。大きなものでも、こういうものを使えば全体からズームをしながら細部を眺めていくことができる。これはすごい。大きいグラフでも、こうやってみればいいのだな。これは本当にすごい。すごいすごい。 Graphviz ってやっぱりおもしろい。もっと早く試せばよかったなぁ。可能性はあちこちに書かれているのを見て認識してはいたのだが、簡単に日本語使えなきゃおもしろくねぇやと使わなかったのだが、やってみたら、簡単に日本語使えるじゃんということで積極的に使ってみることにするのであった。 ちなみに WinGraphviz なんていうものもあって、Shift_JIS でなきゃいやとかいう人も、これを使えば日本語が扱える。Use WinGraphviz in ASP なんてこともできる。ただし、2004 04/28 WinGraphviz ver1.02.25s とかなっているから古いけど。 他にも、mfGraph Library Homepage や、Yapgvb (Yet Another Python Graphviz Binding)、GvGen などが Python からグラフを扱えるライブラリとしてある。これらについても、後日チェックしたいと思う。 Graphviz 関連の参考
お気に入りの記事を「いいね!」で応援しよう
Last updated
2007.11.09 01:20:15
コメント(0) | コメントを書く
[Python] カテゴリの最新記事
|