直線とか曲線とか
既出の関数もありますが、改めてまとめてみた。
Rでは、グラフィックデバイスが開いている必要があり、上書きする関数と考えられます。
だから、直線はグラフの王道ですが、Rでは主に装飾で重宝します。
ただ、僕には引数の使い方が直感的でないように思う。
- lines関数
lines関数は2点のx座標とy座標を指定して、その間を結びます。
> x1 <- c(1,2) > x2 <- c(8,3) > x3 <- c(4,4) > > jpeg("lines.plot.jpg") > lines(x1,x2) # これはエラーになる 以下にエラー plot.xy(xy.coords(x, y), type = type, ...) : まだ plot.new が呼ばれていません > > # グラフィックデバイスを開く > plot(rbind(x1,x2,x3),type="n") > lines(x=c(x1[1],x2[1]),y=c(x1[2],x2[2]),lty=1,col=1) > lines(x=c(x1[1],x3[1]),y=c(x1[2],x3[2]),lty=2,col=2,lwd=2) > dev.off()
で、こんな感じ。
xとyの引数を見て分かるように、x,yは2点間のx座標とy座標を指定する。
個人的には、x1とx2を結ぶなら、lines(x1,x2)みたいにしてほしい。
と考えると、この方が直感的かも。
> plot(rbind(x1,x2,x3),type="n") > lines(rbind(x1,x2),lty=1,col=1) > lines(rbind(x1,x3),lty=2,col=2,lwd=2)
結果は上と同じはず。
- abline関数
abline関数は
-
- y = a + bxとする引数aとbを指定して直線を引く
- 引数hでx = 0に対する平行線を引く
- 引数vでy = 0に対する平行線を引く
- 引数coef = c(a,b)を同時に指定して直線を引く
- 引数regはcoefとほぼ同じ
といった機能を持つ。
lm関数などで回帰したときにグラフにする時に重宝する。
> jpeg("abline.plot.jpg") > layout(matrix(1:4,ncol=2)) > par(mai=c(.7,.7,.4,.1)) > # y = -1 + 2xを引く > # グラフィックデバイスを開く > plot(NA,type="n",xlim=c(-5,5),ylim=c(-5,5),main="y=-1+2x") > abline(a=-1,b=2,lty=1,lwd=2) > abline(h=0) # x軸を描く > abline(v=0) # y軸を描く > > # x軸に対する平行線 > plot(NA,type="n",xlim=c(-5,5),ylim=c(-5,5),main="parallel line of x-axis") > abline(h=0,v=0) > abline(h=seq(-5,5,2),lty=2:4,col=2:4) > > # y軸に対する平行線 > plot(NA,type="n",xlim=c(-5,5),ylim=c(-5,5),main="parallel line of y-axis") > abline(h=0,v=0) > abline(v=seq(5,-5,-3),lty=c(1,5),lwd=1:2) > > # coefとregを使う > plot(NA,type="n",xlim=c(-5,5),ylim=c(-5,5),main="coef and reg") > # coefでy = -1 + 2xを描く > abline(h=0,v=0,coef=c(-1,2)) > # y=3+2xを描く > abline(b=2,reg=3,col=2) > # y=1+2xを描く > abline(reg=c(1,2),col=3) > dev.off()
個人的には、lines関数よりも直感的と思う。