### Name: Working with Viewports ### Title: Maintaining and Navigating the Grid Viewport Tree ### Aliases: pushViewport downViewport seekViewport popViewport upViewport ### Keywords: dplot ### ** Examples # push the same viewport several times grid.newpage() vp <- viewport(width=0.5, height=0.5) pushViewport(vp) grid.rect(gp=gpar(col="blue")) grid.text("Quarter of the device", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="blue")) pushViewport(vp) grid.rect(gp=gpar(col="red")) grid.text("Quarter of the parent viewport", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="red")) popViewport(2) # push several viewports then navigate amongst them grid.newpage() grid.rect(gp=gpar(col="grey")) grid.text("Top-level viewport", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="grey")) if (interactive()) Sys.sleep(1.0) pushViewport(viewport(width=0.8, height=0.7, name="A")) grid.rect(gp=gpar(col="blue")) grid.text("1. Push Viewport A", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="blue")) if (interactive()) Sys.sleep(1.0) pushViewport(viewport(x=0.1, width=0.3, height=0.6, just="left", name="B")) grid.rect(gp=gpar(col="red")) grid.text("2. Push Viewport B (in A)", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="red")) if (interactive()) Sys.sleep(1.0) upViewport(1) grid.text("3. Up from B to A", y=unit(1, "npc") - unit(2, "lines"), gp=gpar(col="blue")) if (interactive()) Sys.sleep(1.0) pushViewport(viewport(x=0.5, width=0.4, height=0.8, just="left", name="C")) grid.rect(gp=gpar(col="green")) grid.text("4. Push Viewport C (in A)", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="green")) if (interactive()) Sys.sleep(1.0) pushViewport(viewport(width=0.8, height=0.6, name="D")) grid.rect() grid.text("5. Push Viewport D (in C)", y=unit(1, "npc") - unit(1, "lines")) if (interactive()) Sys.sleep(1.0) upViewport(0) grid.text("6. Up from D to top-level", y=unit(1, "npc") - unit(2, "lines"), gp=gpar(col="grey")) if (interactive()) Sys.sleep(1.0) downViewport("D") grid.text("7. Down from top-level to D", y=unit(1, "npc") - unit(2, "lines")) if (interactive()) Sys.sleep(1.0) seekViewport("B") grid.text("8. Seek from D to B", y=unit(1, "npc") - unit(2, "lines"), gp=gpar(col="red")) pushViewport(viewport(width=0.9, height=0.5, name="A")) grid.rect() grid.text("9. Push Viewport A (in B)", y=unit(1, "npc") - unit(1, "lines")) if (interactive()) Sys.sleep(1.0) seekViewport("A") grid.text("10. Seek from B to A (in ROOT)", y=unit(1, "npc") - unit(3, "lines"), gp=gpar(col="blue")) if (interactive()) Sys.sleep(1.0) seekViewport(vpPath("B", "A")) grid.text("11. Seek from\nA (in ROOT)\nto A (in B)") popViewport(0)