実装関連事項

各種プログラミング言語の基本的な書き方やソフトウェア等の使用方法について.

R で散布図を描く.散布図は縦軸と横軸にそれぞれ対応のあるデータを設定することでそれらふたつの変数間の関連性を確認することができる.また,横軸に時間,縦軸の実測値,すなわち,時系列データを設定すると値の変遷を確認することができる.散布図は研究をするにあたり,最も基本的で使用頻度の高いグラフのひとつといえる.R においては plot() にて生成することができる.この plot() は非常に多機能であり,使いこなすことで散布図のみならず,棒グラフやヒストグラム等の様々なグラフをきれいに描くことができる.

以下では,次に示される150個からなるそれぞれが対応しているデータXとデータYから散布図を生成する.

5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8 6.2 5.6 5.9 6.1 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4 6.0 6.7 6.3 5.6 5.5 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7 6.0 6.9 5.6 7.7 6.3 6.7 7.2 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8 6.7 6.7 6.3 6.5 6.2 5.9
1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 1.5 1.6 1.4 1.1 1.2 1.5 1.3 1.4 1.7 1.5 1.7 1.5 1.0 1.7 1.9 1.6 1.6 1.5 1.4 1.6 1.6 1.5 1.5 1.4 1.5 1.2 1.3 1.4 1.3 1.5 1.3 1.3 1.3 1.6 1.9 1.4 1.6 1.4 1.5 1.4 4.7 4.5 4.9 4.0 4.6 4.5 4.7 3.3 4.6 3.9 3.5 4.2 4.0 4.7 3.6 4.4 4.5 4.1 4.5 3.9 4.8 4.0 4.9 4.7 4.3 4.4 4.8 5.0 4.5 3.5 3.8 3.7 3.9 5.1 4.5 4.5 4.7 4.4 4.1 4.0 4.4 4.6 4.0 3.3 4.2 4.2 4.2 4.3 3.0 4.1 6.0 5.1 5.9 5.6 5.8 6.6 4.5 6.3 5.8 6.1 5.1 5.3 5.5 5.0 5.1 5.3 5.5 6.7 6.9 5.0 5.7 4.9 6.7 4.9 5.7 6.0 4.8 4.9 5.6 5.8 6.1 6.4 5.6 5.1 5.6 6.1 5.6 5.5 4.8 5.4 5.6 5.1 5.1 5.9 5.7 5.2 5.0 5.2 5.4 5.1

これらのデータをコピーして,以下のコマンドでそれぞれ変数 vx と vy に格納する.以下の方法でなく,ファイルから読み込むこともできる.その場合は,ファイル名を x.txt としたとき,vx=scan("x.txt") のように打つ.

$ vx=scan("clipboard")
$ vy=scan("clipboard")

簡単な描画

このデータに対して最も簡単に描画するには以下のよう打つ.

$ plot(vx,vy)

これを実行した結果は以下のようになる.

ida_r_scatter_plot_01.svg

図の装飾

コマンド plot() には様々なオプションが設定されており,以下のよう打つときれいな図が描ける.ここで,type にはプロットの形式を指定する.p は点をプロットすることを意味する.col はその点の色を決める.main には図のタイトルを指定する.cex.main はタイトルのフォントサイズの指定.xaxs="i"yaxs="i" を同時に指定するとX軸とY軸が最初値で交わるようになる.xlim および ylim にはそれぞれX軸とY軸の描画範囲を指定する.las=1 は軸目盛の配置の向きを決定するオプションである.

$ plot(vx,vy,type="p",pch=16,col="#ff8c00",main="Scatter plot",cex.main=3,xaxs="i",yaxs="i",xlim=c(0,8),ylim=c(0,8),las=1)

これを実行した結果は以下のようになる.

ida_r_scatter_plot_02.svg

オプション一覧

オプションには以下のようなものがある.

オプション詳細使用例
xX軸の値を指定.x=vx
yY軸の値を指定.y=vy
typeプロットの形式を指定.アルファベットで指定.p は点を打つ.l はライン.b は点と線の両方.c は b のプロットから点を消す.o は点と線の重ね書き.h はヒストグラムのような見かけの,X軸から各点へと向かう線分のプロット.s は前の点と次の点を水平に引き続き垂直の線分で結ぶ階段状のプロット.S はその逆の階段状プロット.n はプロットしない.type="n"
aspアスペクト比.y/x のアスペクト比を指定.比例関係を確認したい際に便利.asp=1
colプロットの色を指定col="red"
main散布図のタイトルを指定main="Scatter plot A"
xlabX軸ラベルを指定xlab="price"
ylabY軸ラベルを指定ylab="frequency"
xlimX軸の表示範囲の指定.ベクトルで指定ylim=c(0, 10)
ylimY軸の表示範囲の指定.ベクトルで指定ylim=c(0, 200)
logx または y または xy を指定することで,指定した軸を対数軸にて表示するlog="y"
las軸目盛および各項目の表示スタイルを指定.0,1,2,3の数値で指定.デフォルトでは全軸の項目ラベル (目盛) は各軸に対して平行.las=1 を指定すると,各項目 (目盛) が全て水平に位置し Excel と同じになる.las=1
font.mainグラフのタイトルのフォントの指定font.main=15
font.subサブタイトルのフォントの指定font.sub=2
font.lab軸ラベルのフォントの指定font.lab=15
font軸項目および目盛のフォントの指定font=15
cex.mainグラフのタイトルのフォントサイズの指定cex.main=4
cex.subサブタイトルのフォントサイズの指定cex.sub=1
cex.lab軸ラベルのフォントサイズの指定cex.lab=1.6
cex.names軸項目のフォントサイズの指定cex.names=1.2
cex.axis目盛のフォントサイズの指定cex.axis=1.2
cex.mainグラフのタイトルのフォントサイズの指定cex.main=4
cex.lab軸ラベルのフォントサイズの指定cex.lab=1.6

より高度な描画

コマンド plot() の機能のみを用いてもそこそこの図が描けるが,points() や lines() 等を組み合わせて用いると,グリッド線を設定したり,軸目盛を自由に設定したり,細部まで図を調整することができるようになる.この場合,plot() では type="n" を指定することで点や線は描かずに枠とプロット領域の範囲のみを設定することになる.points() を使って散布図を描くには以下のようにする.ここでは,R に付属のデータセット iris から setosa,versicolor または virginica という3つの分類を抜き出し,それらを色分けしてプロットする.以下のコマンドにおいて,type="n" は何もプロットしないオプション.xaxt="n" および yaxt="n" は軸のメモリを描かないオプション.ここはその後に axis() にて指定する.bty="l" は枠を L型に設定するためのオプション.他に,o を指定すると枠が箱型,7 を指定すると枠が7型,c を指定すると枠が c型,u,] を指定するとそれぞれ,その見た目の形に,n を指定すると枠が描かれなくなる.次の行の axis() コマンドは軸を詳細にコントローするするためのもの.side は軸の指定.1はX軸,2はY軸となる.tck=1.0 を指定するとグリッド線が描かれ,lty でその線分のタイプを決定する.lwd は線分の太さを決めるオプション.labels は軸目盛を指定するオプション.次の行の points() は点を打つためのコマンドで,points(x, y) のように指定する.

$ par(las=1)
$ plot(x=NULL,type="n",xaxs="i",yaxs="i",xlab="X value",ylab="Y value",xlim=c(0,8),ylim=c(0,8),las=1,xaxt="n",yaxt="n",bty="l")
$ axis(side=1,at=seq(0,8,1),tck=1.0,lty="dotted",lwd=0.5,labels=seq(0,8,1))
$ axis(side=2,at=seq(0,8,1),tck=1.0,lty="dotted",lwd=0.5,labels=seq(0,8,1))
$ points(subset(iris,iris$Species=="setosa")$Sepal.Length,subset(iris,iris$Species=="setosa")$Petal.Length,pch=16,col="#2b4b65")
$ points(subset(iris,iris$Species=="versicolor")$Sepal.Length,subset(iris,iris$Species=="versicolor")$Petal.Length,pch=16,col="#ff8c00")
$ points(subset(iris,iris$Species=="virginica")$Sepal.Length,subset(iris,iris$Species=="virginica")$Petal.Length,pch=16,col="#e12f3c")

これを実行した結果は以下のようになる.

ida_r_scatter_plot_03.svg

また,lines() を使えば,以下のような滑らかな曲線を描くことができる.以下では正規分布の確率密度関数を描いている.ここで,dnorm() は正規分布の密度を生成するためのコマンドで,ここでは N(0,1) に従う,最小値-4,最大値4までにおいて0.01ステップで密度を生成している.その他のオプションは上と同様.

$ plot(x,type="n",xaxs="i",yaxs="i",xlim=c(-4,4),ylim=c(0,0.5),bty="l",xaxt="n",xlab="",ylab="Probability density",las=1)
$ x=seq(-4,4,0.01)
$ lines(x,dnorm(x,mean=0,sd=1),lty=1,lwd=1.6,col="#2b4b65")
$ axis(side=1,at=seq(-4,4,1),tck=1.0,lty="dotted",lwd=0.5,labels=seq(-4,4,1))
$ axis(side=2,at=seq(0,0.5,0.1),tck=1.0,lty="dotted",lwd=0.5,labels=NA)

これを実行した結果は以下のようになる.このように,コマンド plot() を用いると様々な形式の散布図を描くことができる.

ida_r_scatter_plot_04.svg

より高度な描画に用いるコマンド一覧

高度な描画をする際に用いるコマンドには以下のようなものがある.

オプション詳細使用例
points()プロットエリアに点を打つ.points(x,y)
lines()プロットエリアにプロットした点を線分で結ぶ.linse(x,y)
axis()軸の設定をする.side=1はX軸,side=2はY軸を表す.axis(side=1,...)
par()様々なグラフィックパラメーターを指定する.par(las=1)
Hatena Google+