Skip to content
2月 22 / rakkyoo

rubyからgnuplotを使って,データをプロット


rubyでグラフを書きたいなって思っていたのですが,いろいろな方法はあれど,gnuplotを使えば簡単にかけるみたいですね.

方法としては,

  1. gnuplotのインストール
  2. Ruby gnuplotのパッケージのインストール

だけです.

1.Gnuplotのインストール


Macports経由でいすんトールするなら,ターミナルで,

$ sudo port install gnuplot

だけです.

2.Ruby gnuplot パッケージのインストール

$ sudo gem install gnuplot

これだけです.

3.具体的な例として

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# -*- coding: utf-8 -*-
 require "gnuplot"
 
Gnuplot.open do |gp|
	Gnuplot::Plot.new( gp ) do |plot|
		plot.title  'test'
		plot.ylabel 'ylabel'
		plot.xlabel 'xlabel'
 
		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"
			ds.notitle
		end
	end
end

こんな感じかなと.
実行すると,以下のようなグラフができます.
Gnuplot
ちなみに,線の太さを変えたりも簡単で,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -*- coding: utf-8 -*-
 require "gnuplot"
 
Gnuplot.open do |gp|
	Gnuplot::Plot.new( gp ) do |plot|
		plot.title  'test'
		plot.ylabel 'ylabel'
		plot.xlabel 'xlabel'
 
		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"
			ds.linewidth = 4 # ←線の太さを変えている
			ds.notitle
		end
	end
end

こんな感じで書くと,
Gnuplot 1
このようにしっかりと太くなります.

グラフを重ねるときは,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# -*- coding: utf-8 -*-
 require "gnuplot"
 
Gnuplot.open do |gp|
	Gnuplot::Plot.new( gp ) do |plot|
		plot.title  'test'
		plot.ylabel 'ylabel'
		plot.xlabel 'xlabel'
 
		# グラフ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"
			ds.notitle
		end
 
		# グラフ2個目
		x = (-100..100).collect {|v| v.to_f+50}
		y = (-100..100).collect {|v| v.to_f ** 2}
		plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds|
			ds.with = "lines"
			ds.notitle
		end
 
		# グラフ3個目
		x = (-100..100).collect {|v| v.to_f+100}
		y = (-100..100).collect {|v| v.to_f ** 2}
		plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds|
			ds.with = "lines"
			ds.notitle
		end
	end
end

こんな感じでグラフを3つ書いてみると,,,
Gnuplot 2
このようにかけます.

xとyの配列を作って,plot.dataに渡しているだけで,こんな感じでかけるので,とっても便利です♪

[`twib` not found]

Leave a comment

CAPTCHA


This blog is kept spam free by WP-SpamFree.