日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

どうして、横幅が足りないと軸ラベルが飛ぶのか?

Rはグラフィックスペースが狭いと、軸のラベルが間引きされてしまう。
当時、何故かこのことが嫌だった。
けっこう重宝していたのですが、今思うと、何でこんなの作ったんだろう?

> gridtext <- function(label, cex=12, at=seq(label), side=1, rot=-60, just="right", line=1,col=1,tcl=-0.1, ...){
+ library("gridBase")
+ if(missing(label)) stop("missing label")
+ if(missing(just)){
+ if(side==1|side==4) just <- "left"
+ if(side==2|side==3) just <- "right"
+ }
+ if(missing(line)) line <- 1
+ axis(side=side,at=at,labels=FALSE,lwd=0.3,tcl=tcl)
+ vps <- baseViewports()
+ par(new=TRUE)
+ pushViewport(vps$inner, vps$figure, vps$plot)
+ if(side==1) grid.text(label=label, x=unit(at, "native"), 
+ y=unit(line*(-1), "lines"), just=just, rot=rot, gp=gpar(fontsize=cex,col=col,...))
+ if(side==2) grid.text(label=label, y=unit(at, "native"), 
+ x=unit(line*(-1), "lines"), just=just, rot=rot, gp=gpar(fontsize=cex,col=col,...))
+ if(side==3) grid.text(label=label, x=unit(at, "native"), 
+ y=unit(line+.03, "npc"), just=just, rot=rot, gp=gpar(fontsize=cex,col=col,...))
+ if(side==4) grid.text(label=label, y=unit(at, "native"), 
+ x=unit(line+.03, "npc"), just=just, rot=rot, gp=gpar(fontsize=cex,col=col,...))
+ popViewport(3)
+ par(new=FALSE)
+ detach("package:gridBase")
+ }

で、普通のグラフと比べると、ちょっとだけ見栄えが良くなります。

> dat <- data.frame(matrix(rnorm(48),ncol=8,dimnames=list(paste("rowname",1:6),paste("colname",1:8))))
> jpeg("gridtext.jpg",width=720)
> layout(t(1:2))
> boxplot(dat,pch=16)
> boxplot(dat,pch=16,xaxt="n")
> gridtext(label=colnames(dat))
> dev.off()

で、こんな感じ。

> jpeg("gridtext2.jpg",width=720)
> layout(t(1:2))
> boxplot(t(dat),pch=16,horizontal=TRUE)
> boxplot(t(dat),pch=16,yaxt="n",horizontal=TRUE)
> gridtext(label=rownames(dat),side=2,rot=0,just="right",line=.5)
> dev.off()

で、こんな感じ。

gridBaseパッケージは多機能で使いこなすと美しいグラフがかけると思います。
でも、僕はこれで精一杯でした…

gridBaseはここに良くまとまっています。