2010-12-21 4 views
1

Ich frage mich, ob es möglich ist, Gitter Ansichtsfenstern mit Doppel wie folgt angeben:pushViewport -> layout.pos.col mit Doppel möglich?

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

Wenn ich das versuche ich bekommen Zeile 1 und Spalte 1.

Aber ich will die Hälfte haben Spalte 1 und Hälfte von Spalte 2.

Hat jemand einen Tipp für mich?

Antwort

2

Wahrscheinlich können Sie es nicht durch layout.pos.row und layout.pos.col tun. einfache Abhilfe ist, Position und Größe angeben:

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

auch, glaube ich Ihnen eine Wrapper-Funktion schreiben kann dies durch pos.col und pos.row in doppelter Angabe wie folgt aus:

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

Danke für Ihre schnelle Antwort. Ich werde das ausprobieren. –

+0

Hallo, die bearbeitete Funktion vpvp() kann es tun, aber beachte, dass die meisten Optionen für das viewport() ignoriert werden. – kohske

+0

Vielen Dank für Ihr Codebeispiel. Es funktioniert jetzt! –

Verwandte Themen