RubyからGnuplotを使ってグラフを描画・保存する例

Rubyでグラフをプロットする方法をいろいろ調べていますが、matplotlibflotprotovis/d3.jsに匹敵するようなネイティブのプロッティングライブラリはないんですね。これまで何名かが挑戦しているようなので、これから参戦するのも大変そうです。

とりあえずgnuplotラッパーを使ってみました。他のウェブサイトのサンプルでは、set terminal/set outputでファイルに保存する方法が書かれていない物が多かったので、以下に例をあげておきます。

インストール

gemで一発で入ります。

1
gem install gnuplot

グラフをプロットし、Postscriptで保存する例

基本的に、set系のコマンドは

1
plot.set "setコマンドの引数"

という形式で指定します。

線種やkeyを表示するか等のグラフオブジェクト個々の設定は、DataSetを作成して渡すときに指定します(以下の例だとGnuplot::DataSet.new( [x, y] ) do 〜 endの内側)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
require "gnuplot"

Gnuplot.open do |gp|
	Gnuplot::Plot.new( gp ) do |plot|
		plot.title  'y = x^{2}'

		plot.ylabel 'ylabel'
		plot.xlabel 'xlabel'
		plot.set "size ratio 1"
		plot.set 'terminal postscript color eps enhanced font "Helvetica,20" size 15cm,15cm'
		plot.set "output 'yx2.ps'"
		plot.set "linestyle 1 linecolor rgbcolor 'orange' linetype 1"
		x = (-100..100).collect {|v| v.to_f}
		y = (-100..100).collect {|v| v.to_f ** 2}

		plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds|
			ds.with = "lines ls 1"
			ds.linewidth = 4
			ds.notitle
		end
	end
end

上記の例をyx2.rbとして保存し、以下のように実行すると次のような図が保存されます。

1
ruby yx2.rb

生成される図

[tmkm-amazon]4797372273[/tmkm-amazon]