51. 低水準作図関数


高水準関数で描いた図に文字や図形を描き加える場合は低水準作図関数を用いる.低水準作図関数はグラフィックスパラメータを引数として受け入れることも出来る.

低水準作図関数一覧

まず,低水準作図関数の一覧表を挙げる.

種類

関数

機能

points(x, y) , points(c(x, y))

各点の x 座標と y 座標を指定することで点列を描く (規定では points() に対して,関数の引数 type に "p" を与える) . マーカーの形式はグラフィックスパラメータ pch によって指定する.また,points(approx(x, y)) でデータの線形補間が行える.

直線

lines(x, y) , lines(c(x, y))

各点の x 座標と y 座標を指定することで,それぞれの点を通る直線・曲線を描く.点列を描く (規定では lines() に対して,関数の引数 type に "l" を与える) .

abline(a, b), abline(c(a, b))

a ,b は切片と傾きを表し,直線 y = a + bx を描く.

abline(h = y)

ベクトルで与えられた y 座標の水平線を引く.

abline(v = x)

ベクトルで与えられた x 座標の垂直線を引く.

abline(result)

result は関数 lm() で直線回帰を行った結果が入ったオブジェクトで,回帰直線が描かれる.

格子

grid(a, b)

a × b 本の格子を描く.引数として col, lty, lwd が指定できる

線分

segments(x0, y0, x1, y1)

始点の座標 (x0,y0) と,終点の座標 (x1 ,y1) を通る線分を描く.

矢印

arrows(x0, y0, x1, y1)

始点の座標 (x0,y0) と,終点の座標 (x1 ,y1) を通る矢印を描く.

矩形

rect(x0, y0, x1, y1)

始点の座標 (x0,y0) と,終点の座標 (x1 ,y1) を通る長方形を描く.引数として col, border, density が指定できる

文字

text(x, y, labels)

座標 (x,y) にラベルが描かれる.座標値と文字列をベクトルで指定することも出来る.text の引数に srt = -(回転角) を入れることで,プロットの x 軸ラベルを45度回転させることが出来る.

mtext(text, side = 3, line = 0, at = NA)

書き込む文字列を引数 text で指定し,side に文字列を書き込む余白位置を表す番号 (1:下,2:左,3:上,4:右) を指定する.ここで line には図形領域から何行離すかを指定し,at には文字列を書き込む座標を指定することも出来る.

box()

軸や目盛を描かず枠だけ描く.例えば box(lty='1373', col = 'red') として色や線の太さを指定することも出来る.(この場合は図の枠に赤い模様が付く).

題名

title(main, sub)

引数 main に上部余白に描かれるメインタイトルを,引数 sub に下部余白に描かれるサブタイトルを指定して,図の上下の余白部分にタイトルを追加する.省略すると,それぞれメインタイトルとサブタイトルが描かれなくなる.また,引数 tmag でテキストの拡大率を指定することが出来る.

axis(side=4, labels=F)

座標を描く (1:下,2:左,3:上,4:右).引数 labels に FALSE を指定すると目盛のラベルは描かれなくなる.また,引数 at=1:10 で目盛のラベルを指定することが出来る.

axis(side=1, pos=0)

引数 pos で軸を描く位置を指定することが出来る.上 (side=3) か下 (side=1) に軸を描く場合は y 座標を,右 (side=4) か 左 (side=2) に軸を描く場合は x 座標を pos に与えればよい.例えば pos = 0 とすれば原点を通る座標軸を描くことが出来る.

凡例

legend(x, y, legend)

座標 (x,y) に凡例を追加する.引数 legend に文字ベクトルを指定することにより複数行に渡る凡例を,引数 ncol に 2 以上の数値を指定することで複数列に渡る凡例を作ることが出来る.

legend(locator(1), legend=文字)

関数 locator() により対話的に凡例の位置を決定する.

legend(..., fill=v , col=v)

箱を塗りつぶす色,点や線を描く色を指定する.

legend(..., lty=v , lwd=v , pch=v)

線の種類と線の幅,プロット用の文字 (文字ベクトル) を指定する.

図形

polygon(x,y)

(x,y) に多角形の頂点の座標ベクトル(または x ,y 成分を持つリストや行列)を指定して多角形を描いて中を塗りつぶす.要素に NA があると,多角形の生成は終了する.

polygon(x, y, density=c(10, 20), angle=c(-45, 45))

引数 density により,ビット/インチで太さを指定したラインを使って多角形の内部に影を入れることが出来る.このとき,引数 angle で角度 (左回りに) を与えて線の傾斜を指定することが出来る.引数は border や col , lty や xpd を指定することが出来る.

例:図の消去

 
 frame()
 plot.new()

例:点の描画

 
 plot(-4:4, -4:4, type = "n")
 points(rnorm(200), rnorm(200), pch="+", col = "red")

例:折れ線の描画

 
 x <- seq(0, 10, by=0.1)
 y <- seq(0, 1, by=0.01)
 plot(x, y, ylab="", type='n', main = "Title\n- subtitle -")
 for(i in 1:5) lines(x, beta(x,i), col = i) 

例:直線の描画

 
 plot(1:10)
 abline(a=0, b=1)               # 切片 0 ,傾き 1 の直線
 abline(h=1:10, v=1:10, lty=2)  # 格子を描く

例:線分と矢印

 
 plot(1:10)
 segments(2,2,3,3)   # 点(2,2) と点 (3,3) を通る線分を描く
 arrows(5,5,7,7)     # 点(5,5) と点 (7,7) を通る矢印を描く

例:文字列の描画

 
 plot(1:10)                      # text() と locator() の組み合わせ
 text(locator(1), labels = "値") # 座標を一つだけ得て,その位置に文字列を描き込む

 plot(1:10, (-4:5)^2, main="Parabola Points",  xlab="xlab", ylab="")
 mtext("subtitle")               # 関数 mtext() を普通に使う場合
 for(s in 1:4)                   # 引数 side などを変化させた場合
   mtext(paste("mtext(..., line= -1, {side, col, font} = ",s, 
         ", cex = ", (1+s)/2, ")"), line = -1, side=s, col=s, cex= (9+s)/10)

例:枠を描く

 
 box()

例:タイトル,サブタイトルの追加

 
 plot(rnorm(50), rnorm(50))
 title(main="Main Title", sub = "Sub Title")

例:座標軸の描画

 
 plot(rnorm(50), rnorm(50), xlim=c(-3,3), ylim=c(-3,3), axes = F, ann=F)
 axis(1, pos = 0, at = -3:3, adj = 0, col = 2) # 赤で X 軸を描く
 axis(2, pos = 0, at = -3:3, adj = 1, las = 2) # 黒で Y 軸を描く
 box()

例:凡例の描画

 
  plot(1:10, 1:10, ann=F, type='n')
   legend(4, 4, paste("example",c(1:5)), col = c(1:5),
          lwd=1, merge = TRUE, bg='gray90')            # (4,4) に凡例を描画
   legend(5, 9, paste("sin(",6:9,"pi * x)"), col=6:9,    
          pch=3, ncol=2, cex=1.1, pt.bg="pink")        # (5,9) に凡例を描画

例:多角形の描画

 
 plot(c(1,9), 1:2, type="n")
 polygon(1:9, c(2,1,2,1,NA,2,1,2,1),
         density=c(10, 20), angle=c(-45, 45))

低水準作図関数による作図例

まず,散布図を描いた後,まず関数 axis() で 両軸を描き,次に関数 box() で枠を描く.さらに関数 legend() で凡例を描いた後,最後に関数 polygon() で多角形を描いている.

 
 plot(rnorm(50), rnorm(50), xlim=c(-3,6), ylim=c(-3,3), axes = F, ann=F)
 axis(1, pos = 0, at = -3:6, adj = 0, col = 2)                      # 赤で X 軸を描く
 axis(2, pos = 0, at = -3:6, adj = 1, las = 2)                      # 黒で Y 軸を描く
 box() 
 legend(2, 3, paste("sin(",6:9,"x)"), col=6:9,    
        pch=3, ncol=2, cex=1.1, pt.bg="pink")                       # (5,9) に凡例を描画
 polygon(3:6, c(-2,-1,-2,-1), density=c(10, 20), angle=c(-45, 45))
 arrows(5, -1, 4, 2, col="blue")                                    # (5,-1) から (4,2) に矢印を描く

関数 polygon() を用いることで,グラフの一部に影を付けることが出来る(RjpWikiの記事より引用した).まず,標準正規分布の密度関数のグラフを -4 ≦ x ≦ 4 の範囲でプロットする.そのうち 2 ≦ x ≦ 4 の範囲に灰色の影を付けるには,以下の様に多数の多角形に分割して関数 polygon() で塗りつぶしをすればよい.具体的には xvals ,rep(0,10) の組合せで x 軸上の辺を結び,rev(xvals) ,rev(dvals) の組合せでグラフに沿った辺を結べばよい.

 
 plot(dnorm, -4, 4)
 xvals <- seq(2, 4, length=10)               # 領域をx軸方向に10個の多角形(台形)に等分割
 dvals <- dnorm(xvals)                       # 対応するグラフの高さ
 polygon(c(xvals,rev(xvals)),
         c(rep(0,10),rev(dvals)),col="gray") # 塗りつぶす
 title("Title")                              # タイトルを描く
 mtext("sub-title", side=4)                  # 文字を描く