Ruby で gnuplot を使い関数グラフを描く
Python の pylab で簡単に関数グラフが描けたので(参照)、Ruby でも出来ないかとぐぐってみたところ、なかなか簡単なやつがありました。Linux で使える Gnuplot というツールのラッパーGem があったので使ってみます(ソースコード)。すでにここにとてもいい記事があったので、そのとおりにやるだけです。
Gnuplot
まず、Linux に Gnuplot を入れます。やり方は上のブログの別記事を見れば簡単にわかります。Linux Mint 17.2 で確認しました。
一応書いておくと、$ sudo apt-get install gnuplot-x11
でお終いです。インストールの確認は、$ gnuplot
で対話型インターフェイスが立ち上がれば OK です。そこで gnuplot> test
でテスト描画されることを確認して下さい。
www.gnuplot-cmd.com
Ruby の gnuplot Gem
これもインストールは、上のブログ記事(参照)を参考にして下さい。gem install gnuplot で出来るということです。僕の場合は bundler を使っているので、そこからでも OK でした。
サンプルコード。pylab の場合と同じグラフを描いてみます。
require 'gnuplot' Gnuplot.open do |gp| Gnuplot::Plot.new(gp) do |plot| plot.xrange "[-3:3]" f = "x ** 4 + 2 * 5 ** 3 - 10 * x ** 2 + 5 * x + 4" plot.data << Gnuplot::DataSet.new(f) end gets end
結果はこんな感じです。
Ruby の場合でも結構簡単ですね。
しかし Ruby 好きが思うには、科学技術のツールとして Ruby が Python に追いつく日はたぶん来ないような気がする。僕程度の初心者でも、ツールとしての Python はあまりにも便利そうに見える。実際世界的に Python を使う人がすごく多いから、これからさらに Python のライブラリは充実し、よたよたしながら Ruby は離されていくのではないか。Ruby は GUI 標準の Ruby/Tk ですら、公式ドキュメントが用意されていない。Ruby/Tk はますます使われなくなっていくだろうと思う。
(※追記 初心者がバカなことを書いたな。頑張っておられるコミュニティの方々に失礼だ。4/13)
画像出力
グラフを画像ファイルに落とすことができます。ここを参考にしました。
require 'gnuplot' Gnuplot.open do |gp| Gnuplot::Plot.new(gp) do |plot| plot.terminal "png" plot.output "gnuplot_sample.png" plot.xrange "[-3:3]" f = "sin(x)" plot.data << Gnuplot::DataSet.new(f) end gets end
結果。
3次元
ここからのコピペです。すごいなあ。
require 'gnuplot' Gnuplot.open do |gp| Gnuplot::SPlot.new(gp) do |plot| plot.set "isosamples 50,50" plot.set "pm3d at b" plot.data << Gnuplot::DataSet.new("sin(sqrt(x*x+y*y))/sqrt(x*x+y*y)") end gets end
※参考
rubyからgnuplotを使って,データをプロット | rakkyooの備忘録
Ruby で Gnuplot – MF
※注記
Gem は上で紹介した 'gnuplot' よりも、新しく出た 'numo/gnuplot' の方が遥かに使いやすいです。以下のリンク先を参照。(12/23)
【Ruby】numo-gnuplotで遊ぶ – MF
gnuplot で陰関数の表示(Ruby) - Camera Obscura