Rによる散布図の描画
R で散布図を描く.散布図は縦軸と横軸にそれぞれ対応のあるデータを設定することでそれらふたつの変数間の関連性を確認することができる.また,横軸に時間,縦軸の実測値,すなわち,時系列データを設定すると値の変遷を確認することができる.散布図は研究をするにあたり,最も基本的で使用頻度の高いグラフのひとつといえる.R においては plot() にて生成することができる.この plot() は非常に多機能であり,使いこなすことで散布図のみならず,棒グラフやヒストグラム等の様々なグラフをきれいに描くことができる.
以下では,次に示される150個からなるそれぞれが対応しているデータXとデータYから散布図を生成する.
これらのデータをコピーして,以下のコマンドでそれぞれ変数 vx と vy に格納する.以下の方法でなく,ファイルから読み込むこともできる.その場合は,ファイル名を x.txt としたとき,vx=scan("x.txt") のように打つ.
$ vx=scan("clipboard") $ vy=scan("clipboard")
簡単な描画
このデータに対して最も簡単に描画するには以下のよう打つ.
$ plot(vx,vy)
これを実行した結果は以下のようになる.
図の装飾
コマンド 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)
これを実行した結果は以下のようになる.
オプション一覧
オプションには以下のようなものがある.
オプション | 詳細 | 使用例 |
---|---|---|
x | X軸の値を指定. | x=vx |
y | Y軸の値を指定. | 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" |
xlab | X軸ラベルを指定 | xlab="price" |
ylab | Y軸ラベルを指定 | ylab="frequency" |
xlim | X軸の表示範囲の指定.ベクトルで指定 | ylim=c(0, 10) |
ylim | Y軸の表示範囲の指定.ベクトルで指定 | ylim=c(0, 200) |
log | x または 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")
これを実行した結果は以下のようになる.
また,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() を用いると様々な形式の散布図を描くことができる.
より高度な描画に用いるコマンド一覧
高度な描画をする際に用いるコマンドには以下のようなものがある.
オプション | 詳細 | 使用例 |
---|---|---|
points() | プロットエリアに点を打つ. | points(x,y) |
lines() | プロットエリアにプロットした点を線分で結ぶ. | linse(x,y) |
axis() | 軸の設定をする.side=1はX軸,side=2はY軸を表す. | axis(side=1,...) |
par() | 様々なグラフィックパラメーターを指定する. | par(las=1) |