tkでプロットする何かを探していてBLTは高機能だけどなんとなくインストーラが気に食わなかったり、パッケージの仕方が汚くてインストールしたくなかったりするのですが、いろいろとWeb漁っているうちにgnuplotがtkcanvasに出力できるとか。なんでも3.6からの新機能らしい。新機能にはpng出力とかロウソク足のプロットとかができるようになってたのでこれはと思い、3.5から3.7.3にバージョンアップしてみました。
まずはwebで検索して簡単なマニュアルをやってみる。どうやらcanvasにプロットするプロシージャをファイルに出力し、それにcanvasのパスを渡してプロットしてやるという手順らしいです。multiplotはできないとか書いてあるけど、できるようです。たぶん、multiplotモードのままsourceして失敗したのでしょう。set multiplotしてplotしたらset nomultiplotしてやらないと、プロシージャの定義が完了しません。(図は適当に出力してみた例。期待のローソク足が激烈に汚い(汗))
次。tclからgnuplotにパイプでコマンドを流してtkcanvas用のプロシージャを出力させてみます。 windows版のgnuplotは独自のコンソールを立ち上げてパイプで流し込めないのですが、付属のpgnuplot.exeを使えばパイプで接続することができます。
set p [open |gnuplot w] puts $p {set terminal tkcanvas} puts $p {set output "gnuplot.proc"} puts $p {plot sin(x)} flush $p
と、このようにすればgnuplot.procを作ってくれるので、こいつをsourceしてやればよいです。ただ、注意しないといけないのはファイルの書き込みが完了する前にsourceするとまずいので、適当に同期処理を書くといいと思います。ここでは書いてませんけど・・・
source gnuplot.proc canvas .c gnuplot .c pack .c
このようにすればcanvasにプロットされます。
終了する時は
close $p
でパイプを閉じればOK。gnuplot.procファイルが残ってるけど、気になるならこれも削除すればOK。 windows版だとpgnuplotを使ってパイプ接続できるのは、書き込みだけでgnuplotのSTDOUTをtclのSTDINに接続することはできないようです。うーん。unixだと双方向パイプで接続できるのになあ。