*はじめに [#t790d8e9]
Rでグラフを重ねる方法のメモです.
ここでは,例として,次の二つのグラフを重ねて書きます.
#geshi(rsplus){{
> set.seed(123)
> x1 = rnorm(100, mean=1, sd=0.3)
> y1 = rnorm(100, mean=1, sd=0.3)
> c1 <- cbind(x1, y1)
> colnames(c1) <- c("x", "y")
> plot(c1)
}}
#ref(c1.png,nolink,50%)
#geshi(rsplus){{
> x2 = rnorm(100, mean=-1, sd=0.3)
> y2 = rnorm(100, mean=-1, sd=0.3)
> c2 <- cbind(x2, y2)
> colnames(c2) <- c("x", "y")
> plot(c2, pch=2)
}}
#ref(c2.png,nolink,50%)
*グラフを重ねる [#w3ee12e1]
グラフを描画するためのパラメーターを設定するには,''par関数''を使います.
グラフを重ねるにはpar関数に引数 new=T を指定しますが,そのまま重ねてしまうと次のようになります.
#geshi(rsplus){{
> plot(c1)
> par(new=T)
> plot(c2, pch=2)
}}
#ref(new_T_only.png,nolink,50%)
確かに,そのまま重ねればこうなりますね.
*表示する範囲を揃える [#y2a2f77e]
まず,二つのグラフの軸の範囲がそろっていないので,これをそろえます.
軸の範囲を指定するには,plot関数の引数に xlim と ylim を指定します.
#geshi(rsplus){{
> plot(c1, xlim=c(-2,2), ylim=c(-2,2))
> par(new=T)
> plot(c2, xlim=c(-2,2), ylim=c(-2,2), pch=2)
}}
#ref(xlim_ylim.png,nolink,50%)
これでいいように見えますが,実は,同じ軸が2度描かれています.
二つのグラフを重ねるだけなら重ねていてもそんなに問題になりませんが,大量のグラフを重ねると,PDFファイルに出力したときにファイルのサイズが大きくなって,描画にも時間がかかってしまいます.
*軸と軸ラベルを非表示にする [#f0ec986c]
そこで,軸は一つのグラフだけに描き,その他のグラフでは軸と軸ラベルを非表示にします.
軸を非表示にするには,plot関数の引数に axes=F を指定します.
軸ラベルを非表示にするには,plot関数の引数に xlab="", ylab="" を指定します.
#geshi(rsplus){{
> plot(c1, xlim=c(-2,2), ylim=c(-2,2), axes=F, xlab="", ylab="")
}}
#ref(xlim_ylim_axes_xlab_ylab.png,nolink,50%)
このように軸と軸ラベルなしのグラフを重ねておき,最後に軸と軸ラベル付きのグラフを重ねます.
#geshi(rsplus){{
> par(new=T)
> plot(c2, xlim=c(-2,2), ylim=c(-2,2), pch=2)
}}
#ref(xlim_ylim_axes_xlab_ylab_par.png,nolink,50%)
これで完成です.
*まとめ [#lf2fd5d4]
Rでグラフを重ねるには,表示する範囲を揃えておき,最後(または最初)以外のグラフの軸と軸ラベルを非表示して重ねます.
Rでグラフを重ねるには,表示する範囲を揃えておき,グラフの軸と軸ラベルを非表示にして重ねておき,最後のグラフだけ軸と軸ラベルを表示して重ねます.
#geshi(rsplus){{
> plot(c1, xlim=c(-2,2), ylim=c(-2,2), axes=F, xlab="", ylab="")
> par(new=T)
> plot(c2, xlim=c(-2,2), ylim=c(-2,2), pch=2)
}}
#ref(xlim_ylim_axes_xlab_ylab_par.png,nolink,50%)