April 28, 2006

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ファイルを作成しています。

23:09 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/482
コメント
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。