グラフに文字を記入したいときはtext関数とmtext関数が便利。
- text関数
引数x, yで座標を指定できるので、自由度がかなり高い。
また、引数posで座標(x,y)に対して文字を書く位置を指定する。pos=1なら下辺、2なら左、3なら上、4なら右。
記入する文字は引数labelsで指定する。
> dat <- runif(100,min=10,max=20) > x <- hist(dat,plot=FALSE) > str(x) # $midsが棒グラフの中点、$countsが高さになる List of 7 $ breaks : num [1:11] 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 ... $ counts : int [1:10] 8 6 9 19 11 8 13 4 10 12 $ intensities: num [1:10] 0.8 0.6 0.9 1.9 1.1 ... $ density : num [1:10] 0.8 0.6 0.9 1.9 1.1 ... $ mids : num [1:10] 0.05 0.15 0.25 0.35 0.45 0.55 0.65 0.75 0.85 0.95 $ xname : chr "dat" $ equidist : logi TRUE - attr(*, "class")= chr "histogram" > > jpeg("text.jpg") > plot(x,ylim=c(0,max(x$counts)*1.2)) > points(x=x$mids,y=x$counts,pch=1,cex=2.5) > text(x=x$mids[1],y=x$counts[1],labels=x$counts[1]) #座標に書く(defaultはpos=NULL) > text(x=x$mids[2],y=x$counts[2],labels=x$counts[2],pos=1) #下に書く > text(x=x$mids[3],y=x$counts[3],labels=x$counts[3],pos=2) #左に書く > text(x=x$mids[4],y=x$counts[4],labels=x$counts[4],pos=3) #上に書く > text(x=x$mids[5],y=x$counts[5],labels=x$counts[5],pos=4) #右に書く > text(x=x$mids[2],y=x$counts[2],labels=x$counts[2],pos=1,offset=1,col=2) #offsetは座標からの距離(defaultは0.5) > text(x=x$mids[3],y=x$counts[3],labels=x$counts[3],adj=c(-1,-1),col=2) #座標からの距離を細かく指定、左と下が正の方向(defaultはadj=c(.5,.5)) > text(x=x$mids[6],y=x$counts[6],labels=x$counts[6],pos=3,font=2) #font=2は太字 > text(x=x$mids[7],y=x$counts[7],labels=x$counts[7],pos=3,font=3) #font=3は斜体 > text(x=x$mids[8],y=x$counts[8],labels=x$counts[8],pos=3,font=4) #font=4は太字 斜体 > text(x=x$mids[9],y=x$counts[9],labels="\300",pos=3,font=5,cex=2) #font=5はsymbol > text(x=x$mids[10],y=x$counts[10],labels=x$counts[10],pos=3,srt=90) #srtは回転 > dev.off()
- mtext関数
座標を指定せず、グラフの枠からどれだけ離れたところに文字を記入するか決める。
引数linesはグラフの枠から何行離れるか、を指定する。
記入する文字は引数textで指定する。
text関数と同じ引数があったり、違う引数があったり、この辺を統一してくれると嬉しいんだけど。
> jpeg("mtext.jpg") > par(mai=c(.8,.8,1,2)) > plot(x,ylim=c(0,max(x$counts)*1.2),ann=FALSE,yaxt="n") > box() > mtext(text="line=0&side=3") #上に書く(defaultはlines=0,side=3) > mtext(text="line=1&side=3",line=1,col=2) #1行分、上にずれる > mtext(text="line=-1&side=3",line=-1,col=3) #1行分、下にずれる > mtext(text="line=0&side=1",side=1) #下に書く > mtext(text="line=0&side=2",side=2) #左に書く(軸にそって自動で回転する) > mtext(text="line=0&side=4",side=4) #右に書く(軸にそって自動で回転する) > mtext(text="line=0&side=4",side=4,line=1,las=1) #回転させたくないときはlas=1 > mtext(text="adj=0",adj=0) #side=1に対して相対位置を指定(左端が0、右端が1) > mtext(text="adj=1",adj=1) #adj=0は左揃え、adj=1は右揃え > mtext(text="at=10",at=10,line=-1,col=2) #atはsideに対して絶対位置を指定(side=1, 3はx座標、side=2, 4はy座標) > mtext(text="at=10",at=10,line=-1,padj=1,col=3) #上下の調整はpadjを使う > mtext(text="at=10",at=10,line=-1,padj=1,adj=-1,col=4) #左右の調整adjを使う > mtext(text="side=3&line=-1",line=-1,col=5,outer=TRUE) #outer=TRUEはグラフ領域 の四辺に大してlineを指定する > dev.off()
text関数とmtext関数は似ているけど、同じ引数があったり、違う引数があったり、引数で戸惑うことが多い。
どっちかに統一してくれると嬉しいのですが。