library(grid)でお絵かき


なかなか、納得のいかないまま、スライド作り。

さっさ作ってしまえば良いのに、こーゆー時に限ってはまってしまうものです。
ってことで、library(grid)のお勉強。

R2winbugsが返すbugsオブジェクトを使って作図します。library(grid)ってば、自由度はめちゃ高いですがなかなかに使い勝手が悪い。作図関数でも座標系の単位がデフォルトの状態で、npcだったりnativeだったりが混在していて、はまってしまいました。ま、最初から指定しとけばいいんだけど。

いちお、関数にしてみました。ターゲットがかなり薄いですが、ご自由にもってってください。

関数名:col.dens

・内容
R2winbugsが返すbugsオブジェクトを使って、任意のパラメータのカーネル密度を描いて、95%信頼区間を塗りつぶします。

・使い方
col.dens(dat,header,max)です。datはbugsオブジェクト名、headerはbugsオブジェクト中のパラメータ名、maxはy軸の最大値です。

使用例
col.dens(hogehoge,”Beta1″,5)とかすると

grid

多分、こーゆー画が描けます。
スクリプトは下のとおり。
使いもんにならんぞ、ゴルァ!! なお叱りはコメントにてお願いします。

[sourcecode language=’cpp’]
col.dens <- function(dat,header,max){ i <- which(colnames(dat$sims.matrix)==header) density.dat <- density(dat$sims.matrix[,i]) border.rnum <- which(rownames(dat$summary)==header) min.border.cnum <- which(colnames(dat$summary)=="2.5%") max.border.cnum <- which(colnames(dat$summary)=="97.5%") line.x <- density.dat$x line.y <- density.dat$y grid.newpage() view1 <- viewport(x=0.5,y=0.5,w=0.8,h=0.8,xscale=c(-1.5,1.5), yscale=c(0,max)) pushViewport(view1) grid.polygon(x=c(dat$summary[border.rnum,min.border.cnum],dat$summary[border.rnum,min.border.cnum], dat$summary[border.rnum,max.border.cnum], dat$summary[border.rnum,max.border.cnum]), y=c(0, max, max, 0),default.units="native",gp=gpar(fill="#D3CAAA",col="#D3CAAA")) grid.rect() grid.xaxis() # x 軸を描く grid.yaxis() grid.lines(x = line.x, y=line.y,"native") grid.lines(x = c(0,0), y=c(0,max),"native") } [/sourcecode]