1

次のように double でグリッド ビューポートを指定できるかどうか疑問に思っています。

pushViewport(viewport(layout.pos.row=1, layout.pos.col=1.5))
popViewport() 

これを試していると、行1と列1が得られます。

しかし、col 1 の半分と col 2 の半分が必要です。

誰か私にヒントがありますか?

4

1 に答える 1

2

おそらく、layout.pos.row と layout.pos.col では実行できません。簡単な回避策は、位置とサイズを指定することです:

grid.newpage()
pushViewport(viewport(layout=grid.layout(2, 2)))
grid.rect(gp=gpar(fill=1),vp=viewport(layout.pos.col=1,layout.pos.row=1))
grid.rect(gp=gpar(fill=2),vp=viewport(layout.pos.col=1,layout.pos.row=2))
grid.rect(gp=gpar(fill=3),vp=viewport(layout.pos.col=2,layout.pos.row=1))
grid.rect(gp=gpar(fill=4),vp=viewport(layout.pos.col=2,layout.pos.row=2))

pushViewport(viewport(x=unit(0.5, "npc"), width=unit(0.5, "npc"), 
  y=unit(0.75, "npc"), height=unit(0.5, "npc")))
grid.rect(gp=gpar(fill="white"))

また、次のように pos.col と pos.row を double で指定することで、これを行うラッパー関数を作成できると思います。

vpvp <- function(pos.col, pos.row){
  cvp <- current.viewport()
  nrow <- cvp$layout$nrow
  ncol <- cvp$layout$ncol
  w <- unit(1/ncol, "npc")
  h <- unit(1/nrow, "npc")
  x <- unit((pos.col-0.5)/ncol, "npc")
  y <- unit(1-(pos.row-0.5)/nrow, "npc")
  viewport(x=x, y=y, width=w, height=h)
}

grid.newpage()
pushViewport(viewport(layout=grid.layout(2, 3)))
grid.rect(gp=gpar(fill=1),vp=viewport(layout.pos.col=1,layout.pos.row=1))
grid.rect(gp=gpar(fill=2),vp=viewport(layout.pos.col=1,layout.pos.row=2))
grid.rect(gp=gpar(fill=3),vp=viewport(layout.pos.col=2,layout.pos.row=1))
grid.rect(gp=gpar(fill=4),vp=viewport(layout.pos.col=2,layout.pos.row=2))
grid.rect(gp=gpar(fill=5),vp=viewport(layout.pos.col=3,layout.pos.row=1))
grid.rect(gp=gpar(fill=6),vp=viewport(layout.pos.col=3,layout.pos.row=2))

pushViewport(vpvp(pos.col=2.5, pos.row=1.5))
grid.rect(gp=gpar(fill="white"))
于 2010-12-21T09:23:39.090 に答える