カメヲラボ

主にプログラミングとお勉強全般について書いてます

Rプログラミング入門(6)

グラフを画像ファイルとして保存する

RGui上なら

RGui上でグラフを描いた場合、メニューの「ファイル」から「別名で保存→データ形式(JPEGとかBMPとか)」を選ぶだけでできます。グラフが描かれているウィンドウ上で右クリックでも可能です。

↓メニューから選ぶ場合


↓右クリックの場合

プログラムを書くなら

プログラムを書いて保存する場合も、非常にシンプルです。グラフを描く前に、データ形式を指定する関数を呼び、最後にdev.off()という関数を呼んでデータの書き込みを終了します。データ形式を指定する関数は、bmp, jpeg, png, tiff, pdf, postscriptと、そのまんまの名前なので覚えやすくて良いです。

例)

> jpeg("graph.jpg")
> plot( x, y, type="l" )
> dev.off()

サイズの指定とか、細かいことはhelp関数を使えばすぐに出てきますので、色々と試してみてください。

グラフを描いてみよう(3)

これまでは二次関数のグラフとランダムな点のプロットだけだったので、それ以外にもいろいろと描いてみます。

棒グラフ

単純な棒グラフを描いてみます。前回使用したrunif関数を使ってランダムな値を得ます。グラフの色も指定してみましょう。

y <- runif(10)
barplot( y, col="gray90" )


"grayXX"のXXの数値を大きくすると白っぽくなっていきます。上記の図ではすべてグレーになっていますが、

barplot( y, col=c("gray90", "cyan") )

のように、色をリストにしてやると、リストの色が順番に繰り返し使われます。

ちなみに、色は文字列でなくても整数値で設定できるので、赤なら"col=0xff0000"、青なら"col=0x0000ff"みなたいな書き方もできます。整数値だとグラデーションとか自由に作れると思うので、覚えておくと良さそうですね。…と思ったら、なんか動作が怪しげな感じです。整数値じゃなくて文字列"#ffffff"みたいな形でした方が良さそうです。

さらに、棒グラフは二次元でも表示することができます。3×4の配列データを渡してやると、

y <- matrix( runif( 12 ), 3, 4 )
barplot( y, col=c( "#ffffaa", "#ffffcc", "#ffffee" ) )


このように、各列ごとでグラフが描かれます。縦に積まずに横に並べる場合は、パラメータ"beside"をTRUEにしてやります。

barplot( y, col=c( "#ffffaa", "#ffffcc", "#ffffee" ), beside=T )
ヒストグラム

データを階級(一定の範囲)ごとに数えて棒グラフで表したものを「ヒストグラム」と言います。とりあえず、以下のプログラムを実行してみましょう。

y <- rnorm(100)
hist(y, breaks=seq(-5, 5),col="#ffffcc" )


rnormという関数で、乱数を100個作ります。乱数を作るので、上の画像と全く同じにはなりませんが同じような形ができると思います。

上記のプログラムを実行したとき、エラーが発生してグラフが表示されない場合があります。それは、yの中に-5〜5ではない値が入ってしまった可能性が高いです。ためしに、

breaks=seq(-5, 5)

の部分を

breaks=seq(-1, 1)

とかに変えてみてください。ほぼ確実にエラーになります。

これを避けるためには、階級の範囲を十分大きくするのも良いですが、たぶんグラフの見た目が良くないので、元のプログラムを以下のように書き換えてください。

y <- rnorm(100)
y[ y<-5 | y>5] <- NA
hist(y, breaks=seq(-5, 5),col="#ffffcc" )

二行目のように、範囲外の値は"NA"で埋めてやるとエラーは発生しません。また、階級を1刻みではなく、もう少し細かくしたいときはseq関数の第3引数に刻みの幅を追加してください。

y <- rnorm(100)
y[ y < -5 | y > 5] <- NA
hist(y, breaks=seq(-5, 5, 0.5),col="#ffccff" )


☆注意
不等式を表す際に、不等号の前後は空白を入れる習慣を身に付けておいてください。たとえば、"y < -5"のところを"y<-5"と書いてしまうと、yに5を代入する意味になってしまいます。代入の"<-"と、不等号の"<"+マイナス"-"の区別を意識して!!