我想知道是否可以像这样使用 double 指定网格视口:
pushViewport(viewport(layout.pos.row=1, layout.pos.col=1.5))
popViewport()
当我尝试这个时,我得到第 1 行和第 1 列。
但我想有一半的 col 1 和一半的 col 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"))
另外,我认为您可以通过在 double 中指定 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"))