mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Ruby - gnuplot でグラフ描画!

[ プログラミング ] [ Ruby, gnuplot ]

こんばんは。

Ruby で容易にグラフを描画できる RubyGems ライブラリ gnuplot を使用してみました。

RubyGems ライブラリ gnuplot は、2次元や3次元のグラフを描画するためのコマンドラインツール Gnuplot を Ruby で使用できるようにラップしたものです。

0. 前提条件

1. RubyGems パッケージのインストール

1
$ sudo gem install gnuplot

2. 動作確認

2-1. 作成例・1

単純な曲線・曲線を描画する例。

gnuplot_1.rb
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
#! /usr/local/bin/ruby
#-----------------------------------------------
# Ruby script to draw a graph by gnuplot.(Ex.1)
#-----------------------------------------------
require 'gnuplot'

Gnuplot.open do |gp|
  Gnuplot::Plot.new(gp) do |plot|
    plot.xrange "[-10:10]"
    plot.title  "作成例1"
    plot.xlabel "x"
    plot.ylabel "y"
    plot.grid

    plot.data << Gnuplot::DataSet.new("sin(x)") do |ds|
      ds.with      = "lines"
      ds.linewidth = 2
    end

    plot.data << Gnuplot::DataSet.new("cos(x)") do |ds|
      ds.with      = "lines"
      ds.linewidth = 2
    end
  end
end

そして、実行権限を付与して実行。

1
2
3
$ sudo chmod +x gnuplot_1.rb

$ ./gnuplot_1.rb

Gnuplot ウィンドウが開き、グラフが描画される。

GNUPLOT_1

但し、環境によってはこのウィンドウを閉じようとしてもうまく閉じれないかもしれない。(termnal が “wxt” の場合。 terminal が “x11” 等なら閉じれるが、日本語は使用できない)
ちなみに、本家の gnuplot では、この問題は “Close” を “exit” でなく “exit gnuplot” にバインドすれば解決するようだが、今回の RubyGems ライブラリでは通用しない模様。(試行してみた結果)

2-2. 作成例・2

のグラフを PNG ファイルに描画・出力する例。

gnuplot_2.rb
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
#! /usr/local/bin/ruby
#-----------------------------------------------
# Ruby script to draw a graph by gnuplot.(Ex.2)
#-----------------------------------------------
require 'gnuplot'

Gnuplot.open do |gp|
  Gnuplot::Plot.new(gp) do |plot|
    plot.terminal "png enhanced font 'IPA P ゴシック' fontscale 1.2"
    plot.output   "gnuplot_2.png"
    plot.title    "作成例2"
    plot.xlabel   "x"
    plot.ylabel   "y=x^3-2x+2"
    plot.grid

    x = (-20..20).collect { |v| v.to_f / 10.0 }
    y = x.collect { |v| v ** 3 - 2 * v + 2}

    plot.data << Gnuplot::DataSet.new([x, y]) do |ds|
      ds.with      = "linespoints"  # 点のみなら "points"
      ds.linewidth = 2
      ds.linecolor = 3
      ds.notitle
    end
  end
end

そして、実行権限を付与して実行。

1
2
3
$ sudo chmod +x gnuplot_2.rb

$ ./gnuplot_2.rb

“gnuplot_2.png” というファイルが出力される。

GNUPLOT_2

2-3. 作成例・3

の三次元グラフを PNG ファイルに描画・出力する例。

gnuplot_3.rb
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
#! /usr/local/bin/ruby
#-----------------------------------------------
# Ruby script to draw a graph by gnuplot.(Ex.3)
#-----------------------------------------------

require 'gnuplot'

Gnuplot.open do |gp|
  Gnuplot::SPlot.new(gp) do |plot|
    plot.terminal "png enhanced font 'IPA P ゴシック' fontscale 1.2"
    plot.output   "gnuplot_3.png"
    plot.set      "object 1 rect from screen 0,0 to screen 1,1 fc rgb '#D0D0E0' fillstyle solid 1.0 behind"
    plot.title    "作成例3"
    plot.xrange   "[-10:10]"
    plot.yrange   "[-10:10]"
    plot.xlabel   "x"
    plot.ylabel   "y"
    plot.zlabel   "z"
    plot.pm3d
    plot.grid

    plot.data << Gnuplot::DataSet.new("sin(x)*cos(y)") do |ds|
      ds.with      = "lines"
      ds.linecolor = 6
    end
  end
end

そして、実行権限を付与して実行。

1
2
3
$ sudo chmod +x gnuplot_3.rb

$ ./gnuplot_3.rb

GNUPLOT_3

参考サイト


Ruby で処理した得た数値をグラフ化することが多い場合は重宝するでしょう。

以上。

Comments