プロット領域の外に凡例を記す

MikuHatsune2013-01-31

グラフを描いているときに、凡例をつけることがあるが、グラフ内のプロット直上や直右などに凡例を置きたいことが多々ある。
昔legendの使い方をやったが、グラフ枠内に置くと邪魔なときがあるので枠外に置きたいこともある。
今回は

par()

を利用していい感じにやりたい。
legendといいながら使うのはtextです。でも同じです。
 
par()の中身は

par()
$xlog
[1] FALSE

$ylog
[1] FALSE

$adj
[1] 0.5

$ann
[1] TRUE

$ask
[1] FALSE

#長いので以下略

となっていて、

par()$usr

がプロットされる領域の四隅を表している。
これと、プロットした実際のデータの端点(右か上かなんでも)とを組み合わせて、プロット座標を指定する。
また、

par()$xpd

によって、プロットする枠の外へのプロットも許可するかどうか指定できる。
それで、

par()$mar

で外枠の余白をちょっと確保してそこに凡例を付け足すことにしよう。
 

nr <- 15 #列
nc <- 5  #行
set.seed(12345)
mat <-matrix(sort(runif(nr * nc)), nr, nc)

par(mar=c(5, 4, 4, 3), xpd=TRUE, bty="L") #右側の余白をちょっと確保する
matplot(mat, type="o", pch=16, lwd=3)
text(par()$usr[2], mat[nr, ], paste("#", seq(nc), sep=""), adj=c(-0.5, NA), cex=1.5)