2010-12-21 3 views
1

このような二重のでグリッドビューポートを指定することが可能である場合、私は疑問に思って:pushViewport - > layout.pos.colはdoubleで可能ですか?

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

私はこれをしようとしているとき、私は、行1およびCOL 1

を得る。しかし、私はの半分を持ちたいですcol 1とcol 2の半分。

誰かが私のヒントを持っていますか?

答えて

2

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

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")) 

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を指定することでこれを行うにはラッパー関数を書くことができると思います

+0

すぐにお返事ありがとうございます。私はこれを試してみる。 –

+0

こんにちは、編集された関数vpvp()はそれを行うことができますが、viewport()へのほとんどのオプションは無視されます。 – kohske

+0

コード例ありがとうございます。それは今働きます! –

関連する問題