Rubyでgnuplot

最近グラフを書く機会が多いのですが、ただ単純にデータファイルをプロットすればいいという単純な作業はむしろ少なく、データファイルを読み込んでそれから何がしかの計算をした結果をグラフとして出力するという少々込み入った作業が大半を占めています。いちいち中間ファイルを作ると後からみてわけがわからなくなるので、できるだけ計算とグラフ描画はひとつの処理としてまとめてしまいたいと考えました。そこでRubyからgnuplotをコントロールすることを考えました。

以前『リアルタイム Gnuplot』と称してC++からGnuplotに(擬似)リアルタイム描画させるということを紹介しましたが、今回も基本コンセプトは同じで、RubyからパイプでGnuplotにコマンドを発行してやり、グラフを描画することになります。しかしC++のときのように一から作りこむ必要はなく、そのような用途向けのライブラリが既にRubyにはあります。今回はそのライブラリの一つであるRgplotというものを試してみました。

RgplotのExamplesにあるとおり、非常に簡単にデータをグラフ描画させることができます。
このままでも十分使い出があるライブラリなのですが、多くの場合はGnuplotでepsファイルを書かせるということがメインの作業になると思いますので、ライブラリを少し拡張してepsファイルを吐かせるメソッドを作ってみました。

class Gnuplot
    def Gnuplot::plot_eps file_name #2次元プロット
        Gnuplot.open{|gp|
            Gnuplot::Plot::new(gp){|plot|
                plot.terminal "postscript eps enhanced color"
                plot.output file_name
                yield plot
            }    
        }
        
    end
    
    def Gnuplot::splot_eps file_name #3次元プロット
        Gnuplot.open{|gp|
            Gnuplot::SPlot::new(gp){|plot|
                plot.terminal "postscript eps enhanced color"
                plot.output file_name
                yield plot
            }
        }
    end
end
あとは
Gnuplot::plot_eps(file_name){|plot| データの設定等の処理}
すればfile_nameで指定したファイルにepsが吐かれます。現在これを利用して快適にepsファイルを作成しています。

April 28, 2006 23:09 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク

コメント

コメントする