49. 図の重ね合わせ


単純な作図ならば,引数に add=T を入れることで重ねた図を描くことができる.2 つのグラフの x 軸と y 軸の座標は自動的に合わせられる.

 
 plot(cos, -pi, pi, lty=2)
 curve(sin, add=T)

しかし,高水準作図関数の中には add=T を引数にもってくることが出来ないものがある.そこで,グラフィックスパラメータの new を T と指定することで,既存のグラフに新たなグラフを上書きするように指定することが出来る.

par(new=T) で重ね描きする場合,そのままでは軸と軸のラベルが重ね描きされる.2 回目の plot() によって軸と軸のラベルが重ね書きされるのを避けるため,1 回目のプロット時に axes=F , xlab="",ylab=""(もしくは ann=T )を指定するのが得策である.

par(new=T) で重ね描きする場合,普通はそれぞれのグラフの座標範囲が異なるため,仕上がりがおかしくなる.重ね描きする全てのグラフが同じ座標範囲となるよう,全ての作図関数で xlim = c(x0, x1),ylim = c(y0, y1) を指定すること.

図の重ね合わせ

図を重ね合わせるには,関数 par() を用いる.が,前もって注意したとおり,重ね合わせる際にはちょっとした注意が要る.

まず,以下のようにすれば,とりあえずは図が重ね合わされるが,軸もラベルもバラバラである.

 
 plot(sin, lty=2)                                     # sin(x) を描く 
 par(new=T)                                           # 上書き指定 
 plot(cos)                                            # cos(x) を上書き

軸を合わせるには,2 つの作図関数(ここでは関数 plot() )の引数 xlim と ylim を合わせればよい.・・・が,まだ y 軸ラベルがおかしなことになっている.

 
 plot(sin, xlim=c(0,5), ylim=c(-1,1), lty=2)          # sin(x) を描く 
 par(new=T)                                           # 上書き指定 
 plot(cos, xlim=c(0,5), ylim=c(-1,1))                 # cos(x) を上書き

 

ラベルを合わせるには,1 つ目の作図関数(ここでは関数 plot() )の引数 xlab と ylab に空白 "" を指定し,2 つ目の作図関数でラベルを指定すればよい.

 
 plot(sin, xlim=c(0,5), ylim=c(-1,1), ylab="", lty=2) # sin(x) を描く 
 par(new=T)                                           # 上書き指定 
 plot(cos, xlim=c(0,5), ylim=c(-1,1))                 # cos(x) を上書き

また,1 つ目の作図関数(ここでは関数 plot() )の引数 ann(軸とラベルの出力をする/しない)に FALSE を指定してもよい.

 
 plot(sin, xlim=c(0,5), ylim=c(-1,1), ann=F, lty=2)   # sin(x) を描く 
 par(new=T)                                           # 上書き指定 
 plot(cos, xlim=c(0,5), ylim=c(-1,1))                 # cos(x) を上書き

 

応用例として,ヒストグラムと密度推定曲線を重ね合わせてみる.

 
 x <- rnorm(100)                                       # 正規乱数を 100 個生成して
 hist(x, xlim=c(-4,4), ylim=c(0,0.5), prob=T, ann=F)   # ヒストグラムを描く
 par(new=T)                                            # 上書き可にしてから
 plot(density(x), xlim=c(-4,4), ylim=c(0,0.5), 
      xlab="" , ylab="" , main="" , col="red" )        # 密度推定の曲線を上書きする

この後,axis() で 2 回目のグラフ(plot(density(x)...))が描くはずだった y 軸を図の右側の余白に描くことが出来る.

 
 axis(side=4)

点の色を条件に応じて変える

点の色を条件に応じて変える場合,上記の方法で図を重ね合わせて・・・としてもよいが,以下のように条件分岐すると簡単に実現できる.

 
 x <- runif(100)
 y <- runif(100)
 plot(x, y, col = ifelse(y>0.5, "red", "blue"))    # y > 0.5 なら赤, その他は青