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

코드 예를 들어 주셔서 감사합니다. 이제 작동합니다! –