2015/05/24

Rでグラフを描く際のy軸のラベルなどの件

統計解析やグラフ作成が必要な際にはだいたいいつもRを使っている。
tiffで1000dpi、9cmのグラフを作成したい場合、単純に下記のようにすればよいと思ったわけだが、ラベルの記載がいまいちうまく行かなかった。ラベル中に上付き文字を使う場合はexpression(paste())を使用するのが一般的だと思われるが、どうも上付きにした2の上のほうが下の図のように欠けてしまう。また、y軸の目盛には小数点の".0"がついて欲しかったが、最初その方法が良くわからなかった。

xData <- 5:10
yData <- rnorm(length(xData),7.5,1)

l <- lm(yData ~ xData)

tiff("test.tiff",width=90,height=90,units="mm",res=1000,pointsize=7)
xlim <- c(5,10)
ylim <- c(5.0,10.0)

plot(x=xData, xlab="xData (mm)",
     y=yData, ylab=expression(paste("yData (mm"^"2",")")),
     xlim=xlim,ylim=ylim)

abline(l)
dev.off()


まず、上付きの2の上のほうが欠けてしまう問題について。左側の余白が小さすぎるのが問題っぽかった。par("mar")で出てきた余白を見て、左側の4.1(左から2番目の値)を5.1に変更したらうまくいった。
> par("mar")
[1] 5.1 4.1 4.1 2.1
また、目盛の有効数字についてだが、plot()内で書かずにaxis()を使って自分で書く方法でできることが判明。axis()のlabels引数にsprintf("%.1f",lab_vector)したものを渡すことで".0"がついた目盛を作成できた。
最終的には以下のようになった。

xData <- 5:10
yData <- rnorm(length(xData),7.5,1)

l <- lm(yData ~ xData)

tiff("test.tiff",width=90,height=90,units="mm",res=1000,pointsize=7)
par(mar=c(5.1,5.1,4.1,2.1),font=1,family="Helvetica")
xlim <- c(5,10)
ylim <- c(5.0,10.0)

plot(x=xData, xlab="xData (mm)",
     y=yData, ylab=expression(paste("yData (mm"^"2",")")),
     xlim=xlim,ylim=ylim,xaxt="n",yaxt="n")
axis(1,at=pretty(xlim))
axis(2,at=pretty(ylim),labels=sprintf("%.1f",pretty(ylim)))

abline(l)
dev.off()
これで求めていた形になった。かなり解決に時間がかかったが、今後もRでグラフを作成する際には使っていきたい。統計処理のトレンドはSciPyになってきている?みたいな事も聞いたことがあるが、そっちもそのうち試してみようかと思った。



0 件のコメント:

コメントを投稿