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
あとは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ファイルを作成しています。
コメント
コメントする
- 匿名でのコメントは受け付けておりません。
- お名前(ハンドル名可)とメールアドレスは必ず入力してください。
- メールアドレスを表示されたくないときはURLも必ず記入してください。
- コメント欄でHTMLタグは使用できません。
- コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
- コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。
- 投稿ボタンを押してエラーがでなければ、投稿は成功しています。反映されるまでには少し時間がかかります。