複数のグラフを表示する

par( ) layout( ) 関数を使えば、簡単に複数のグラフを1つのウィンドウに表示できる。


par関数のmfrow / mfcolオプション

par( ) ではオプション mfrow=c(nrows, ncols) を指定すると nrows行 x ncols列 の行列にグラフが描画される。mfrowなので行から描画 (mfrow=c(2,2) であれば左上、右上、左下、右下の順になる) 。 mfcol=c(nrows, ncols) なら列から。左上、左下、右上...。

# 2行2列の領域に4つのグラフを描く
attach(mtcars)
par(mfrow=c(2,2))
lot(wt,mpg, main="Scatterplot of wt vs. mpg")
plot(wt,disp, main="Scatterplot of wt vs disp")
hist(wt, main="Histogram of wt")
boxplot(wt, main="Boxplot of wt")

2 x2 layout click to view

# 3行1列の領域に3つのグラフを描く
attach(mtcars)
par(mfrow=c(3,1))
hist(wt)
hist(mpg)
hist(disp)

3 x 1 layout click to view


layout関数

layout( ) 関数は layout(行列オブジェクト) の形で使う。
行列オブジェクト でグラフの場所を指定する。

# 1行目にグラフを1つ、2行目にグラフを2つ描く
attach(mtcars)
mat <- matrix(c(1,1,2,3), 2, 2, byrow=T)
mat # 行列内の数値はグラフデバイスの番号。1=1番目のグラフ、2=2番目のグラフ

layout(mat)
hist(wt)
hist(mpg)
hist(disp)

11 x 2 3 layout click to view

layout( ) 関数内で widths= と heights= によりグラフの幅と高さを指定すれば、グラフのサイズを細かくコントロールできる。
グラフのレイアウトを示す行列で、
 widths= 各列の幅を示すベクトル
 heights= 各行の高さを示すベクトル

相対幅はwidthsで数値で指定する。絶対幅 (cm単位) lcm() 関数で指定する。

# 1行目にグラフ1つ、2行目にグラフを2つ。1行目は2行目の1/3の高さにする。2行目の2列目は1列目の1/4の幅にする
attach(mtcars)
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE),
       widths=c(3,1), # 幅が3:1 (2列目の幅は1/4)
       heights=c(1,2) # 高さが1:2 (1行目の高さが1/3
       )
hist(wt)
hist(mpg)
hist(disp)

multiplot layout with fine control click to view

配置の微調整

箱ヒゲ図を散布図の上と右に追加。

par(fig=c(0,0.8,0,0.8), new=TRUE)
plot(mtcars$wt, mtcars$mpg, xlab="Miles Per Gallon",
  ylab="Car Weight")
par(fig=c(0,0.8,0.55,1), new=TRUE)
boxplot(mtcars$wt, horizontal=TRUE, axes=FALSE)
par(fig=c(0.65,1,0,0.8),new=TRUE)
boxplot(mtcars$mpg, axes=FALSE)
mtext("すんごい Scatterplot", side=3, outer=TRUE, line=-3)

enhanced scatterplot layout click to view

 fig= は作図領域の位置と大きさを指定する。デフォルトはfig=c(0,1,0,1) 。最初の0,1は横 (x軸) の原点から全て使うという意味。これを0,0.5とすると作図領域の半分しか使わない、すなわち左半分にしか描画されない。後ろの2つは縦 (y軸) を同様に指定する。例えばfig=c(0,1,0,1) は作図領域の左下1/4のスペースだけを使う、という意味。
 new=Tは現在の作図デバイスに追加してグラフを描き加えるということ。

par(fig=c(0,0.8,0,0.8), new=TRUE)
plot(mtcars$wt, ...) # 作図領域左下80%を使って散布図を描く

par(fig=c(0,0.8,0.55,1), new=TRUE)
boxplot(mtcars$wt, horizontal=TRUE, axes=FALSE) # 作図領域の横は左から80%、縦は上45%を使って箱ヒゲ図を描く。軸を消すとちょうどよい位置になる。

...以下同様にfigで位置を調整し、new=Tで追加している。ということ。


どう考えてもExcelで作って適当に切り貼りするほうが早いって…