ここでは,テスト用の CSV ファイル Book1.csv をダウンロードし, ディレクトリ C:\R\の下におくことにします.
※ Ubuntu の場合は /tmp の下などに置く(要するにどこでも良い)
この Web ページのプログラムでは,1行目がヘッダー.2行目以降がデータ本体になっている必要がある. CSV ファイルの1行目に,各列の属性名が書かれていることを確認する.
テスト用の CSV ファイル Book1.csv では, 属性名として seq, date, USD, EUR, AUD の5つが 書かれている.
まだ rsruby は使っていません.このプログラムを書き換えて,いろいろなグラフ作成に使うことします.
require 'rubygems' require "csv" reader = CSV.open("/tmp/Book1.csv", "r") header = reader.take(1)[0] T = Hash::new header.each do |attr| T[attr.strip] = [] end reader.each do |row| i = 0 row.each do |item| T[header[i].strip].push(item.strip) i = i + 1 end end
x 値を格納したベクトル,y 値を格納したベクトルを引数として R の plot() 関数を使うと,散布図が描かれます.
◆ Ubuntu の場合の実行手順例
export R_HOME=/usr/lib/Rirb require 'rubygems' require "csv" require 'rsruby' reader = CSV.open("/tmp/Book1.csv", "r") header = reader.take(1)[0] T = Hash::new header.each do |attr| T[attr.strip] = [] end reader.each do |row| i = 0 row.each do |item| T[header[i].strip].push(item.strip) i = i + 1 end end # draw scatter graph r = RSRuby::instance r.eval_R(<<-RCOMMAND) X <- matrix( c( #{T["seq"].join(",")} ), 1, #{T["seq"].size} ) Y <- matrix( c( #{T["USD"].join(",")} ), 1, #{T["USD"].size} ) plot(X, Y) RCOMMAND
points() 関数や line() 関数 や legend() 関数や text() 関数を使って,簡単に重ね書きできる.例を示しておきます. 次のような感じになります(文法の詳細には立ち入りません).
lines() 関数は,線を重ね書きするもの.
◆ Ubuntu の場合の実行手順例
export R_HOME=/usr/lib/Rirb require 'rubygems' require "csv" require 'rsruby' reader = CSV.open("/tmp/Book1.csv", "r") header = reader.take(1)[0] T = Hash::new header.each do |attr| T[attr.strip] = [] end reader.each do |row| i = 0 row.each do |item| T[header[i].strip].push(item.strip) i = i + 1 end end # draw scatter graph r = RSRuby::instance r.eval_R(<<-RCOMMAND) X <- matrix( c( #{T["seq"].join(",")} ), 1, #{T["seq"].size} ) Y <- matrix( c( #{T["USD"].join(",")} ), 1, #{T["USD"].size} ) plot(X, Y) lines(lowess( X, Y ), col = "red") lines(lowess( X, Y, f=0.2 ), col = "green") RCOMMAND
平滑化の関数は,他にも,smooth.spline(), ksmooth(), supsmu() などが知られている.
legend() 関数では,次を指定する.
【関連する外部ページ】: href="http://www.okada.jp.org/RWiki/?%A5%B0%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF%A5%B9%BB%B2%B9%CD%BC%C2%CE%E3%BD%B8%A1%A7%CB%DE%CE%E3 (現存しない)
グラフィックス参考実例集:凡例 (http://www.okada.jp.org/RWiki/?%A5%B0%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF%A5%B9%BB%B2%B9%CD%BC%C2%CE%E3%BD%B8%A1%A7%CB%DE%CE%E3)
export R_HOME=/usr/lib/Rirb require 'rubygems' require "csv" require 'rsruby' reader = CSV.open("/tmp/Book1.csv", "r") header = reader.take(1)[0] T = Hash::new header.each do |attr| T[attr.strip] = [] end reader.each do |row| i = 0 row.each do |item| T[header[i].strip].push(item.strip) i = i + 1 end end # draw scatter graph r = RSRuby::instance r.eval_R(<<-RCOMMAND) X <- matrix( c( #{T["seq"].join(",")} ), 1, #{T["seq"].size} ) Y <- matrix( c( #{T["USD"].join(",")} ), 1, #{T["USD"].size} ) plot(X, Y) lines(lowess( X, Y ), col = "red") lines(lowess( X, Y, f=0.2 ), col = "green") legend( 5, 105, c( "f = 2/3", "f = 0.2" ), lty = 1, col = c("red", "green") ) RCOMMAND
テキストを書くこともできる.
text(locator(1), labels = "ほげほげ")
グラフィカル・デバイスの種類(例)
など.
例えば,PDF ファイルを作りたいときは,最初に「pdf()」を実行.最後に「dev.off()」で,ファイルを閉じる. すると,作業ディレクトリにファイルができる.作業ディレクトリは,getwd() で分かる.
※ pdf( file="/tmp/.png" ) のように,ファイル名を陽に指定する方が分かりやすいでしょう.
◆ Ubuntu の場合の実行手順例
export R_HOME=/usr/lib/Rirb require 'rubygems' require "csv" require 'rsruby' reader = CSV.open("/tmp/Book1.csv", "r") header = reader.take(1)[0] T = Hash::new header.each do |attr| T[attr.strip] = [] end reader.each do |row| i = 0 row.each do |item| T[header[i].strip].push(item.strip) i = i + 1 end end # draw scatter graph r = RSRuby::instance r.eval_R(<<-RCOMMAND) X <- matrix( c( #{T["seq"].join(",")} ), 1, #{T["seq"].size} ) Y <- matrix( c( #{T["USD"].join(",")} ), 1, #{T["USD"].size} ) png( file="/tmp/1.png" ) plot(X, Y) dev.off() RCOMMAND
出来たファイル(ここでは /tmp/1.png)を表示させると,次のようになる.