2010-12-21 22 views
1

我想知道是否有可能與這樣的雙重指定網格視:pushViewport - > layout.pos.col可能與雙打?

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來完成。 簡單的解決方法是指定位置和大小:

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上雙,這樣做:

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

感謝您的快速回答。我會試試這個。 – 2010-12-21 09:34:00

+0

嗨,編輯的功能vpvp()可以做到這一點,但請注意,viewport()的大多數選項將被忽略。 – kohske 2010-12-21 09:39:12

+0

感謝您的代碼示例。它現在有效! – 2010-12-21 14:09:55