The R Project SVN R

Rev

Rev 89461 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed


R Under development (unstable) (2026-02-10 r89394) -- "Unsuffered Consequences"
Copyright (C) 2026 The R Foundation for Statistical Computing
Platform: aarch64-apple-darwin23.3.0

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> pkgname <- "grid"
> source(file.path(R.home("share"), "R", "examples-header.R"))
> options(warn = 1)
> library('grid')
> 
> base::assign(".oldSearch", base::search(), pos = 'CheckExEnv')
> base::assign(".old_wd", base::getwd(), pos = 'CheckExEnv')
> cleanEx()
> nameEx("Grid")
> ### * Grid
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: Grid
> ### Title: Grid Graphics
> ### Aliases: Grid
> ### Keywords: dplot
> 
> ### ** Examples
> 
> ## Diagram of a simple layout
> grid.show.layout(grid.layout(4,2,
+                      heights=unit(rep(1, 4),
+                                   c("lines", "lines", "lines", "null")),
+                      widths=unit(c(1, 1), "inches")))
> ## Diagram of a sample viewport
> grid.show.viewport(viewport(x=0.6, y=0.6,
+                             width=unit(1, "inches"), height=unit(1, "inches")))
> ## A flash plotting example
> grid.multipanel(vp=viewport(0.5, 0.5, 0.8, 0.8))
> 
> 
> 
> cleanEx()
> nameEx("arrow")
> ### * arrow
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: arrow
> ### Title: Describe arrows to add to a line
> ### Aliases: arrow
> ### Keywords: dplot
> 
> ### ** Examples
> 
> arrow()
$angle
[1] 30

$length
[1] 0.25inches

$ends
[1] 2

$type
[1] 1

attr(,"class")
[1] "arrow"
> str(arrow(type = "closed"), give.attr=FALSE)
"arrow" (pkg {grid}) object:
 $ angle : num 30
 $ length: 'simpleUnit' num 0.25inches
 $ ends  : int 2
 $ type  : int 2
> 
> 
> 
> cleanEx()
> nameEx("as.mask")
> ### * as.mask
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: as.mask
> ### Title: Define a Soft Mask
> ### Aliases: as.mask
> ### Keywords: dplot
> 
> ### ** Examples
> 
> ## NOTE: on devices without support for masks normal line segments 
> ##       will be drawn
> grid.newpage()
> ## Alpha mask
> grid.segments(y0=1, y1=0, gp=gpar(col=2, lwd=100))
> pushViewport(viewport(mask=circleGrob(gp=gpar(fill=rgb(0,0,0,.5)))))
> grid.segments(gp=gpar(col=3, lwd=100))
> grid.newpage()
> ## Luminance mask
> grid.segments(y0=1, y1=0, gp=gpar(col=2, lwd=100))
> pushViewport(viewport(mask=as.mask(circleGrob(gp=gpar(fill="grey50")),
+                                    "luminance")))
> grid.segments(gp=gpar(col=3, lwd=100))
> 
> 
> 
> cleanEx()
> nameEx("calcStringMetric")
> ### * calcStringMetric
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: calcStringMetric
> ### Title: Calculate Metric Information for Text
> ### Aliases: calcStringMetric
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.newpage()
> grid.segments(.01, .5, .99, .5, gp=gpar(col="grey"))
> metrics <- calcStringMetric(letters)
> grid.rect(x=1:26/27,
+           width=unit(metrics$width, "inches"),
+           height=unit(metrics$ascent, "inches"),
+           just="bottom",
+           gp=gpar(col="red"))
> grid.rect(x=1:26/27,
+           width=unit(metrics$width, "inches"),
+           height=unit(metrics$descent, "inches"),
+           just="top",
+           gp=gpar(col="red"))
> grid.text(letters, x=1:26/27, just="bottom")
> 
> test <- function(x) {
+     grid.text(x, just="bottom")
+     metric <- calcStringMetric(x)
+     if (is.character(x)) {
+         grid.rect(width=unit(metric$width, "inches"),
+                   height=unit(metric$ascent, "inches"),
+                   just="bottom",
+                   gp=gpar(col=rgb(1,0,0,.5)))
+         grid.rect(width=unit(metric$width, "inches"),
+                   height=unit(metric$descent, "inches"),
+                   just="top",
+                   gp=gpar(col=rgb(1,0,0,.5)))
+     } else {
+         grid.rect(width=unit(metric$width, "inches"),
+                   y=unit(.5, "npc") + unit(metric[2], "inches"),
+                   height=unit(metric$ascent, "inches"),
+                   just="bottom",
+                   gp=gpar(col=rgb(1,0,0,.5)))
+         grid.rect(width=unit(metric$width, "inches"),
+                   height=unit(metric$descent, "inches"),
+                   just="bottom",
+                   gp=gpar(col=rgb(1,0,0,.5)))
+     }
+ }
> 
> tests <- list("t",
+               "test",
+               "testy",
+               "test\ntwo",
+               expression(x),
+               expression(y),
+               expression(x + y),
+               expression(a + b),
+               expression(atop(x + y, 2)))
> 
> grid.newpage()
> nrowcol <- n2mfrow(length(tests))
> pushViewport(viewport(layout=grid.layout(nrowcol[1], nrowcol[2]),
+                       gp=gpar(cex=5, lwd=.5)))
> for (i in 1:length(tests)) {
+     col <- (i - 1) %% nrowcol[2] + 1
+     row <- (i - 1) %/% nrowcol[2] + 1
+     pushViewport(viewport(layout.pos.row=row, layout.pos.col=col))
+     test(tests[[i]])
+     popViewport()
+ }
> 
> 
> 
> 
> cleanEx()
> nameEx("current.viewport")
> ### * current.viewport
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: Querying the Viewport Tree
> ### Title: Get the Current Grid Viewport (Tree)
> ### Aliases: current.viewport current.parent current.vpTree current.vpPath
> ###   current.transform current.rotation
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.newpage()
> pushViewport(viewport(width=0.8, height=0.8, name="A"))
> pushViewport(viewport(x=0.1, width=0.3, height=0.6,
+   just="left", name="B"))
> upViewport(1)
> pushViewport(viewport(x=0.5, width=0.4, height=0.8,
+   just="left", name="C"))
> pushViewport(viewport(width=0.8, height=0.8, name="D"))
> current.vpPath()
GRID.VP.69::A::C::D 
> upViewport(1)
> current.vpPath()
GRID.VP.69::A::C 
> current.vpTree()
viewport[ROOT]->(viewport[GRID.VP.69]->(viewport[A]->(viewport[B], viewport[C]->(viewport[D])))) 
> current.viewport()
viewport[C] 
> current.vpTree(all=FALSE)
viewport[C]->(viewport[D]) 
> popViewport(0)
> 
> 
> 
> cleanEx()
> nameEx("depth")
> ### * depth
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: depth
> ### Title: Determine the number of levels in an object
> ### Aliases: depth depth.viewport depth.path
> ### Keywords: dplot
> 
> ### ** Examples
> 
> vp <- viewport()
> depth(vp)
[1] 1
> depth(vpStack(vp, vp))
[1] 2
> depth(vpList(vpStack(vp, vp), vp))
[1] 1
> depth(vpPath("vp"))
[1] 1
> depth(vpPath("vp1", "vp2"))
[1] 2
> 
> 
> 
> cleanEx()
> nameEx("deviceLoc")
> ### * deviceLoc
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: deviceLoc
> ### Title: Convert Viewport Location to Device Location
> ### Aliases: deviceLoc deviceDim
> ### Keywords: dplot
> 
> ### ** Examples
> 
> ## A tautology
> grid.newpage()
> pushViewport(viewport())
> deviceLoc(unit(1, "inches"), unit(1, "inches"))
$x
[1] 1inches

$y
[1] 1inches

> 
> ## Something less obvious
> grid.newpage()
> pushViewport(viewport(width=.5, height=.5))
> grid.rect()
> x <- unit(1, "in")
> y <- unit(1, "in")
> grid.circle(x, y, r=unit(2, "mm"))
> loc <- deviceLoc(x, y)
> loc
$x
[1] 2.7inches

$y
[1] 2.75inches

> upViewport()
> grid.circle(loc$x, loc$y, r=unit(1, "mm"), gp=gpar(fill="black"))
> 
> ## Something even less obvious
> grid.newpage()
> pushViewport(viewport(width=.5, height=.5, angle=30))
> grid.rect()
> x <- unit(.2, "npc")
> y <- unit(2, "in")
> grid.circle(x, y, r=unit(2, "mm"))
> loc <- deviceLoc(x, y)
> loc
$x
[1] 2.39165408813987inches

$y
[1] 3.20650635094611inches

> upViewport()
> grid.circle(loc$x, loc$y, r=unit(1, "mm"), gp=gpar(fill="black"))
> 
> 
> 
> cleanEx()
> nameEx("explode")
> ### * explode
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: explode
> ### Title: Explode a path into its components
> ### Aliases: explode explode.character explode.path
> ### Keywords: dplot
> 
> ### ** Examples
> 
> explode("vp1::vp2")
[1] "vp1" "vp2"
> explode(vpPath("vp1", "vp2"))
[1] "vp1" "vp2"
> 
> 
> 
> cleanEx()
> nameEx("gEdit")
> ### * gEdit
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: gEdit
> ### Title: Create and Apply Edit Objects
> ### Aliases: gEdit gEditList applyEdit applyEdits
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.rect(gp=gpar(col="red"))
> # same thing, but more verbose
> grid.draw(applyEdit(rectGrob(), gEdit(gp=gpar(col="red"))))
> 
> 
> 
> cleanEx()
> nameEx("gPath")
> ### * gPath
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: gPath
> ### Title: Concatenate Grob Names
> ### Aliases: gPath
> ### Keywords: dplot
> 
> ### ** Examples
> 
> gPath("g1", "g2")
g1::g2 
> 
> 
> 
> cleanEx()
> nameEx("getNames")
> ### * getNames
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: getNames
> ### Title: List the names of grobs on the display list
> ### Aliases: getNames
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.grill()
> getNames()
[1] "GRID.text.179"     "GRID.rect.180"     "GRID.circle.181"  
[4] "GRID.circle.182"   "GRID.rect.183"     "GRID.rect.184"    
[7] "GRID.segments.185" "GRID.segments.186"
> 
> 
> 
> cleanEx()
> nameEx("gpar")
> ### * gpar
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: gpar
> ### Title: Handling Grid Graphical Parameters
> ### Aliases: gpar get.gpar
> ### Keywords: dplot
> 
> ### ** Examples
> 
> gp <- get.gpar()
> utils::str(gp)
List of 14
 $ fill      : chr "transparent"
 $ col       : chr "black"
 $ lty       : chr "solid"
 $ lwd       : num 1
 $ cex       : num 1
 $ fontsize  : num 12
 $ lineheight: num 1.2
 $ font      : int 1
 $ fontfamily: chr ""
 $ alpha     : num 1
 $ lineend   : chr "round"
 $ linejoin  : chr "round"
 $ linemitre : num 10
 $ lex       : num 1
 - attr(*, "class")= chr "gpar"
> ## These *do* nothing but produce a "gpar" object:
> gpar(col = "red")
$col
[1] "red"

> gpar(col = "blue", lty = "solid", lwd = 3, fontsize = 16)
$col
[1] "blue"

$lty
[1] "solid"

$lwd
[1] 3

$fontsize
[1] 16

> get.gpar(c("col", "lty"))
$col
[1] "black"

$lty
[1] "solid"

> grid.newpage()
> vp <- viewport(width = .8, height = .8, gp = gpar(col="blue"))
> grid.draw(gTree(children=gList(rectGrob(gp = gpar(col="red")),
+                      textGrob(paste("The rect is its own colour (red)",
+                                     "but this text is the colour",
+                                     "set by the gTree (green)",
+                                     sep = "\n"))),
+       gp = gpar(col="green"), vp = vp))
> grid.text("This text is the colour set by the viewport (blue)",
+           y = 1, just = c("center", "bottom"),
+           gp = gpar(fontsize=20), vp = vp)
> grid.newpage()
> ## example with multiple values for a parameter
> pushViewport(viewport())
> grid.points(1:10/11, 1:10/11, gp = gpar(col=1:10))
> popViewport()
> 
> 
> 
> cleanEx()
> nameEx("grid.DLapply")
> ### * grid.DLapply
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.DLapply
> ### Title: Modify the Grid Display List
> ### Aliases: grid.DLapply
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.newpage()
> grid.rect(width=.4, height=.4, x=.25, y=.75, gp=gpar(fill="black"), name="r1")
> grid.rect(width=.4, height=.4, x=.5, y=.5, gp=gpar(fill="grey"), name="r2")
> grid.rect(width=.4, height=.4, x=.75, y=.25, gp=gpar(fill="white"), name="r3")
> grid.DLapply(function(x) { if (is.grob(x)) x$gp <- gpar(); x })
NULL
> grid.refresh()
> 
> 
> 
> cleanEx()
> nameEx("grid.bezier")
> ### * grid.bezier
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.bezier
> ### Title: Draw a Bezier Curve
> ### Aliases: grid.bezier bezierGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> x <- c(0.2, 0.2, 0.4, 0.4)
> y <- c(0.2, 0.4, 0.4, 0.2)
> 
> grid.newpage()
> grid.bezier(x, y)
> grid.bezier(c(x, x + .4), c(y + .4, y + .4),
+             id=rep(1:2, each=4))
> grid.segments(.4, .6, .6, .6)
> grid.bezier(x, y,
+             gp=gpar(lwd=3, fill="black"),
+             arrow=arrow(type="closed"),
+             vp=viewport(x=.9))
> 
> 
> 
> cleanEx()
> nameEx("grid.cap")
> ### * grid.cap
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.cap
> ### Title: Capture a raster image
> ### Aliases: grid.cap
> ### Keywords: dplot
> 
> ### ** Examples
> 
> 
> 
> 
> cleanEx()
> nameEx("grid.clip")
> ### * grid.clip
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.clip
> ### Title: Set the Clipping Region
> ### Aliases: grid.clip clipGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> # draw across entire viewport, but clipped
> grid.clip(x = 0.3, width = 0.1)
> grid.lines(gp=gpar(col="green", lwd=5))
> # draw across entire viewport, but clipped (in different place)
> grid.clip(x = 0.7, width = 0.1)
> grid.lines(gp=gpar(col="red", lwd=5))
> # Viewport sets new clip region
> pushViewport(viewport(width=0.5, height=0.5, clip=TRUE))
> grid.lines(gp=gpar(col="grey", lwd=3))
> # Return to original viewport;  get
> # clip region from previous grid.clip()
> # (NOT from previous viewport clip region)
> popViewport()
> grid.lines(gp=gpar(col="black"))
> 
> 
> 
> cleanEx()
> nameEx("grid.convert")
> ### * grid.convert
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.convert
> ### Title: Convert Between Different grid Coordinate Systems
> ### Aliases: convertUnit convertX convertY convertWidth convertHeight
> ### Keywords: dplot
> 
> ### ** Examples
> 
> ## A tautology
> convertX(unit(1, "inches"), "inches")
[1] 1inches
> ## The physical units
> convertX(unit(2.54, "cm"), "inches")
[1] 1inches
> convertX(unit(25.4, "mm"), "inches")
[1] 1inches
> convertX(unit(72.27, "points"), "inches")
[1] 1inches
> convertX(unit(1/12*72.27, "picas"), "inches")
[1] 1inches
> convertX(unit(72, "bigpts"), "inches")
[1] 1inches
> convertX(unit(1157/1238*72.27, "dida"), "inches")
[1] 1inches
> convertX(unit(1/12*1157/1238*72.27, "cicero"), "inches")
[1] 1inches
> convertX(unit(65536*72.27, "scaledpts"), "inches")
[1] 1inches
> convertX(unit(1/2.54, "inches"), "cm")
[1] 1cm
> convertX(unit(1/25.4, "inches"), "mm")
[1] 1mm
> convertX(unit(1/72.27, "inches"), "points")
[1] 1points
> convertX(unit(1/(1/12*72.27), "inches"), "picas")
[1] 1picas
> convertX(unit(1/72, "inches"), "bigpts")
[1] 1bigpts
> convertX(unit(1/(1157/1238*72.27), "inches"), "dida")
[1] 1dida
> convertX(unit(1/(1/12*1157/1238*72.27), "inches"), "cicero")
[1] 1cicero
> convertX(unit(1/(65536*72.27), "inches"), "scaledpts")
[1] 1scaledpts
> 
> pushViewport(viewport(width=unit(1, "inches"),
+                        height=unit(2, "inches"),
+                        xscale=c(0, 1),
+                        yscale=c(1, 3)))
>   ## Location versus dimension
>   convertY(unit(2, "native"), "inches")
[1] 1inches
>   convertHeight(unit(2, "native"), "inches")
[1] 2inches
>   ## From "x" to "y" (the conversion is via "inches")
>   convertUnit(unit(1, "native"), "native",
+                axisFrom="x", axisTo="y")
[1] 2native
>   ## Convert several values at once
>   convertX(unit(c(0.5, 2.54), c("npc", "cm")),
+                 c("inches", "native"))
[1] 0.5inches 1native  
> popViewport()
> ## Convert a complex unit
> convertX(unit(1, "strwidth", "Hello"), "native")
[1] 0.0558333333333333native
> 
> 
> 
> cleanEx()
> nameEx("grid.curve")
> ### * grid.curve
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.curve
> ### Title: Draw a Curve Between Locations
> ### Aliases: grid.curve curveGrob arcCurvature
> ### Keywords: dplot
> 
> ### ** Examples
> 
> curveTest <- function(i, j, ...) {
+   pushViewport(viewport(layout.pos.col=j, layout.pos.row=i))
+   do.call("grid.curve", c(list(x1=.25, y1=.25, x2=.75, y2=.75), list(...)))
+   grid.text(sub("list\\((.*)\\)", "\\1",
+                 deparse(substitute(list(...)))),
+             y=unit(1, "npc"))
+   popViewport()
+ }
> # grid.newpage()
> pushViewport(plotViewport(c(0, 0, 1, 0),
+                           layout=grid.layout(2, 1, heights=c(2, 1))))
> pushViewport(viewport(layout.pos.row=1,
+                       layout=grid.layout(3, 3, respect=TRUE)))
> curveTest(1, 1)
> curveTest(1, 2, inflect=TRUE)
> curveTest(1, 3, angle=135)
> curveTest(2, 1, arrow=arrow())
> curveTest(2, 2, ncp=8)
> curveTest(2, 3, shape=0)
> curveTest(3, 1, curvature=-1)
> curveTest(3, 2, square=FALSE)
> curveTest(3, 3, debug=TRUE)
> popViewport()
> pushViewport(viewport(layout.pos.row=2,
+                       layout=grid.layout(3, 3)))
> curveTest(1, 1)
> curveTest(1, 2, inflect=TRUE)
> curveTest(1, 3, angle=135)
> curveTest(2, 1, arrow=arrow())
> curveTest(2, 2, ncp=8)
> curveTest(2, 3, shape=0)
> curveTest(3, 1, curvature=-1)
> curveTest(3, 2, square=FALSE)
> curveTest(3, 3, debug=TRUE)
> popViewport(2)
> 
> 
> 
> cleanEx()
> nameEx("grid.delay")
> ### * grid.delay
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.delay
> ### Title: Encapsulate calculations and generating a grob
> ### Aliases: grid.delay delayGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.delay({
+               w <- convertWidth(unit(1, "inches"), "npc")
+               rectGrob(width=w)
+             },
+             list())
> 
> 
> 
> cleanEx()
> nameEx("grid.draw")
> ### * grid.draw
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.draw
> ### Title: Draw a grid grob
> ### Aliases: grid.draw
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.newpage()
> ## Create a graphical object, but don't draw it
> l <- linesGrob()
> ## Draw it
> grid.draw(l)
> 
> 
> 
> cleanEx()
> nameEx("grid.edit")
> ### * grid.edit
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.edit
> ### Title: Edit the Description of a Grid Graphical Object
> ### Aliases: grid.edit grid.gedit editGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.newpage()
> grid.xaxis(name = "xa", vp = viewport(width=.5, height=.5))
> grid.edit("xa", gp = gpar(col="red"))
> # won't work because no ticks (at is NULL)
> try(grid.edit(gPath("xa", "ticks"), gp = gpar(col="green")))
Error in editDLfromGPath(gPath, specs, strict, grep, global, redraw) : 
  'gPath' (xa::ticks) not found
> grid.edit("xa", at = 1:4/5)
> # Now it should work
> try(grid.edit(gPath("xa", "ticks"), gp = gpar(col="green")))
> 
> 
> 
> cleanEx()
> nameEx("grid.force")
> ### * grid.force
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.force
> ### Title: Force a grob into its components
> ### Aliases: grid.force grid.force.default grid.force.gPath grid.force.grob
> ###   forceGrob grid.revert grid.revert.gPath grid.revert.grob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.newpage()
> pushViewport(viewport(width=.5, height=.5))
> # Draw xaxis
> grid.xaxis(name="xax")
> grid.ls()
GRID.text.261
xax
> # Force xaxis
> grid.force()
> grid.ls()
GRID.text.261
xax
  major
  ticks
  labels
> # Revert xaxis
> grid.revert()
> grid.ls()
GRID.text.261
xax
> # Draw and force yaxis
> grid.force(yaxisGrob(), draw=TRUE)
forcedgrob[GRID.yaxis.262] 
> grid.ls()
GRID.text.261
xax
GRID.yaxis.262
  major
  ticks
  labels
> # Revert yaxis
> grid.revert()
> grid.ls()
GRID.text.261
xax
GRID.yaxis.262
> # Force JUST xaxis
> grid.force("xax")
> grid.ls()
GRID.text.261
xax
  major
  ticks
  labels
GRID.yaxis.262
> # Force ALL
> grid.force()
> grid.ls()
GRID.text.261
xax
  major
  ticks
  labels
GRID.yaxis.262
  major
  ticks
  labels
> # Revert JUST xaxis
> grid.revert("xax")
> grid.ls()
GRID.text.261
xax
GRID.yaxis.262
  major
  ticks
  labels
> 
> 
> 
> cleanEx()
> nameEx("grid.frame")
> ### * grid.frame
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.frame
> ### Title: Create a Frame for Packing Objects
> ### Aliases: grid.frame frameGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.newpage()
> grid.frame(name="gf", draw=TRUE)
> grid.pack("gf", rectGrob(gp=gpar(fill="grey")), width=unit(1, "null"))
> grid.pack("gf", textGrob("hi there"), side="right")
> 
> 
> 
> cleanEx()
> nameEx("grid.function")
> ### * grid.function
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.function
> ### Title: Draw a curve representing a function
> ### Aliases: grid.function functionGrob grid.abline
> ### Keywords: dplot
> 
> ### ** Examples
> 
>     # abline
>     # NOTE: in ROOT viewport on screen, (0, 0) at top-left
>     #       and "native" is pixels!
>     grid.function(function(x) list(x=x, y=0 + 1*x))
>     # a more "normal" viewport with default normalized "native" coords
>     grid.newpage()
>     pushViewport(viewport())
>     grid.function(function(x) list(x=x, y=0 + 1*x))
>     # slightly simpler
>     grid.newpage()
>     pushViewport(viewport())
>     grid.abline()
>     # sine curve
>     grid.newpage()
>     pushViewport(viewport(xscale=c(0, 2*pi), yscale=c(-1, 1)))
>     grid.function(function(x) list(x=x, y=sin(x)))
>     # constrained sine curve
>     grid.newpage()
>     pushViewport(viewport(xscale=c(0, 2*pi), yscale=c(-1, 1)))
>     grid.function(function(x) list(x=x, y=sin(x)),
+                   range=0:1)
>     # inverse sine curve
>     grid.newpage()
>     pushViewport(viewport(xscale=c(-1, 1), yscale=c(0, 2*pi)))
>     grid.function(function(y) list(x=sin(y), y=y),
+                   range="y")
>     # parametric function
>     grid.newpage()
>     pushViewport(viewport(xscale=c(-1, 1), yscale=c(-1, 1)))
>     grid.function(function(t) list(x=cos(t), y=sin(t)),
+                   range=c(0, 9*pi/5))
>     # physical abline
>     grid.newpage()
>     grid.function(function(x) list(x=x, y=0 + 1*x),
+                   units="in")
> 
> 
> 
> cleanEx()
> nameEx("grid.get")
> ### * grid.get
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.get
> ### Title: Get a Grid Graphical Object
> ### Aliases: grid.get grid.gget getGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.xaxis(name="xa")
> grid.get("xa")
xaxis[xa] 
> grid.get(gPath("xa", "ticks"))
NULL
> 
> grid.draw(gTree(name="gt", children=gList(xaxisGrob(name="axis"))))
> grid.get(gPath("gt", "axis", "ticks"))
NULL
> 
> 
> 
> cleanEx()
> nameEx("grid.grab")
> ### * grid.grab
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.grab
> ### Title: Grab the current grid output
> ### Aliases: grid.grab grid.grabExpr
> ### Keywords: dplot
> 
> ### ** Examples
> 
> pushViewport(viewport(width=.5, height=.5))
> grid.rect()
> grid.points(stats::runif(10), stats::runif(10))
> popViewport()
> grab <- grid.grab()
> grid.newpage()
> grid.draw(grab)
> 
> 
> 
> cleanEx()
> nameEx("grid.grep")
> ### * grid.grep
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.grep
> ### Title: Search for Grobs and/or Viewports
> ### Aliases: grid.grep
> ### Keywords: dplot
> 
> ### ** Examples
> 
> # A gTree, called "grandparent", with child gTree,
> # called "parent", with childrenvp vpStack (vp2 within vp1)
> # and child grob, called "child", with vp vpPath (down to vp2)
> sampleGTree <- gTree(name="grandparent",
+                      children=gList(gTree(name="parent",
+                           children=gList(grob(name="child", vp="vp1::vp2")),
+                           childrenvp=vpStack(viewport(name="vp1"),
+                                              viewport(name="vp2")))))
> # Searching for grobs
> grid.grep("parent", sampleGTree)
grandparent::parent 
> grid.grep("parent", sampleGTree, strict=TRUE)
character(0)
> grid.grep("grandparent", sampleGTree, strict=TRUE)
grandparent 
> grid.grep("grandparent::parent", sampleGTree)
grandparent::parent 
> grid.grep("parent::child", sampleGTree)
grandparent::parent::child 
> grid.grep("[a-z]", sampleGTree, grep=TRUE)
grandparent 
> grid.grep("[a-z]", sampleGTree, grep=TRUE, global=TRUE)
[[1]]
grandparent 

[[2]]
grandparent::parent 

[[3]]
grandparent::parent::child 

> # Searching for viewports
> grid.grep("vp1", sampleGTree, viewports=TRUE)
vp1 
> grid.grep("vp2", sampleGTree, viewports=TRUE)
vp1::vp2 
> grid.grep("vp", sampleGTree, viewports=TRUE, grep=TRUE)
vp1 
> grid.grep("vp2", sampleGTree, viewports=TRUE, strict=TRUE)
character(0)
> grid.grep("vp1::vp2", sampleGTree, viewports=TRUE)
vp1::vp2 
> # Searching for both
> grid.grep("[a-z]", sampleGTree, viewports=TRUE, grep=TRUE, global=TRUE)
[[1]]
grandparent 

[[2]]
grandparent::parent 

[[3]]
vp1 

[[4]]
vp1::vp2 

[[5]]
grandparent::parent::child 

> 
> 
> 
> cleanEx()
> nameEx("grid.group")
> ### * grid.group
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.group
> ### Title: Draw a Group
> ### Aliases: grid.group groupGrob grid.define defineGrob grid.use useGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> ## NOTE: on devices without support for groups (or masks or patterns),
> ##       there will only be two overlapping opaque circles 
> grid.newpage()
> pat <- pattern(rasterGrob(matrix(c(.5, 1, 1, .5), nrow=2),
+                           width=unit(1, "cm"),
+                           height=unit(1, "cm"),
+                           interpolate=FALSE),
+                width=unit(1, "cm"), height=unit(1, "cm"),
+                extend="repeat")
> grid.rect(gp=gpar(col=NA, fill=pat))
> masks <- dev.capabilities()$masks
> if (is.character(masks) && "luminance" %in% masks) {
+   mask <- as.mask(rectGrob(gp=gpar(col=NA, fill="grey50")), type="luminance")
+ } else {
+   mask <- rectGrob(gp=gpar(col=NA, fill=rgb(0,0,0,.5)))
+ }
> pushViewport(viewport(mask=mask))
> pushViewport(viewport(y=.5, height=.5, just="bottom"))
> grid.circle(1:2/3, r=.45, gp=gpar(fill=2:3))
> popViewport()
> pushViewport(viewport(y=0, height=.5, just="bottom"))
> grid.group(circleGrob(1:2/3, r=.45, gp=gpar(fill=2:3)))
> popViewport()
> 
> 
> 
> cleanEx()
> nameEx("grid.layout")
> ### * grid.layout
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.layout
> ### Title: Create a Grid Layout
> ### Aliases: grid.layout
> ### Keywords: dplot
> 
> ### ** Examples
> 
> ## A variety of layouts (some a bit mid-bending ...)
> layout.torture()
> ## Demonstration of layout justification
> grid.newpage()
> testlay <- function(just="centre") {
+   pushViewport(viewport(layout=grid.layout(1, 1, widths=unit(1, "inches"),
+                           heights=unit(0.25, "npc"),
+                           just=just)))
+   pushViewport(viewport(layout.pos.col=1, layout.pos.row=1))
+   grid.rect()
+   grid.text(paste(just, collapse="-"))
+   popViewport(2)
+ }
> testlay()
> testlay(c("left", "top"))
> testlay(c("right", "top"))
> testlay(c("right", "bottom"))
> testlay(c("left", "bottom"))
> testlay(c("left"))
> testlay(c("right"))
> testlay(c("bottom"))
> testlay(c("top"))
> 
> 
> 
> cleanEx()
> nameEx("grid.lines")
> ### * grid.lines
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.lines
> ### Title: Draw Lines in a Grid Viewport
> ### Aliases: grid.lines linesGrob grid.polyline polylineGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.lines()
> # Using id (NOTE: locations are not in consecutive blocks)
> grid.newpage()
> grid.polyline(x=c((0:4)/10, rep(.5, 5), (10:6)/10, rep(.5, 5)),
+              y=c(rep(.5, 5), (10:6/10), rep(.5, 5), (0:4)/10),
+              id=rep(1:5, 4),
+              gp=gpar(col=1:5, lwd=3))
> # Using id.lengths
> grid.newpage()
> grid.polyline(x=outer(c(0, .5, 1, .5), 5:1/5),
+              y=outer(c(.5, 1, .5, 0), 5:1/5),
+              id.lengths=rep(4, 5),
+              gp=gpar(col=1:5, lwd=3))
> 
> 
> 
> cleanEx()
> nameEx("grid.locator")
> ### * grid.locator
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.locator
> ### Title: Capture a Mouse Click
> ### Aliases: grid.locator
> ### Keywords: dplot
> 
> ### ** Examples
> 
> if (dev.interactive()) {
+   ## Need to write a more sophisticated unit as.character method
+   unittrim <- function(unit) {
+     sub("^([0-9]+|[0-9]+[.][0-9])[0-9]*", "\\1", as.character(unit))
+   }
+   do.click <- function(unit) {
+     click.locn <- grid.locator(unit)
+     grid.segments(unit.c(click.locn$x, unit(0, "npc")),
+                   unit.c(unit(0, "npc"), click.locn$y),
+                   click.locn$x, click.locn$y,
+                   gp=gpar(lty="dashed", col="grey"))
+     grid.points(click.locn$x, click.locn$y, pch=16, size=unit(1, "mm"))
+     clickx <- unittrim(click.locn$x)
+     clicky <- unittrim(click.locn$y)
+     grid.text(paste0("(", clickx, ", ", clicky, ")"),
+               click.locn$x + unit(2, "mm"), click.locn$y,
+               just="left")
+   }
+ 
+   grid.newpage() # (empty slate)
+   ## device
+   do.click("inches")
+   Sys.sleep(1)
+ 
+   pushViewport(viewport(width=0.5, height=0.5,
+                         xscale=c(0, 100), yscale=c(0, 10)))
+   grid.rect()
+   grid.xaxis()
+   grid.yaxis()
+   do.click("native")
+   popViewport()
+ }
> 
> 
> 
> cleanEx()
> nameEx("grid.ls")
> ### * grid.ls
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.ls
> ### Title: List the names of grobs or viewports
> ### Aliases: grid.ls nestedListing pathListing grobPathListing
> ### Keywords: dplot
> 
> ### ** Examples
> 
> # A gTree, called "parent", with childrenvp vpTree (vp2 within vp1)
> # and child grob, called "child", with vp vpPath (down to vp2)
> sampleGTree <- gTree(name="parent",
+                      children=gList(grob(name="child", vp="vp1::vp2")),
+                      childrenvp=vpTree(parent=viewport(name="vp1"),
+                                        children=vpList(viewport(name="vp2"))))
> grid.ls(sampleGTree)
parent
  child
> # Show viewports too
> grid.ls(sampleGTree, viewports=TRUE)
parent
  vp1
    vp2
      2
  vp1
    vp2
      child
      2
> # Only show viewports
> grid.ls(sampleGTree, viewports=TRUE, grobs=FALSE)
vp1
  vp2
    2
vp1
  vp2
    2
> # Alternate displays
> # nested listing, custom indent
> grid.ls(sampleGTree, viewports=TRUE, print=nestedListing, gindent="--")
parent
--vp1
----vp2
------2
--vp1
----vp2
------child
------2
> # path listing
> grid.ls(sampleGTree, viewports=TRUE, print=pathListing)
            | parent
vp1
vp1::vp2
vp1::vp2::2
vp1
vp1::vp2
vp1::vp2    | parent::child
vp1::vp2::2
> # path listing, without grobs aligned
> grid.ls(sampleGTree, viewports=TRUE, print=pathListing, gAlign=FALSE)
 | parent
vp1
vp1::vp2
vp1::vp2::2
vp1
vp1::vp2
vp1::vp2 | parent::child
vp1::vp2::2
> # grob path listing
> grid.ls(sampleGTree, viewports=TRUE, print=grobPathListing)
         | parent
vp1::vp2 | parent::child
> # path listing, grobs only
> grid.ls(sampleGTree, print=pathListing)
 | parent
 | parent::child
> # path listing, viewports only
> grid.ls(sampleGTree, viewports=TRUE, grobs=FALSE, print=pathListing)
vp1
vp1::vp2
vp1::vp2::2
vp1
vp1::vp2
vp1::vp2::2
> # raw flat listing
> str(grid.ls(sampleGTree, viewports=TRUE, print=FALSE))
List of 6
 $ name   : chr [1:8] "parent" "vp1" "vp2" "2" ...
 $ gDepth : num [1:8] 0 1 1 1 1 1 1 1
 $ vpDepth: num [1:8] 0 0 1 2 0 1 2 2
 $ gPath  : chr [1:8] "" "parent" "parent" "parent" ...
 $ vpPath : chr [1:8] "" "" "vp1" "vp1::vp2" ...
 $ type   : chr [1:8] "gTreeListing" "vpListing" "vpListing" "vpUpListing" ...
 - attr(*, "class")= chr "flatGridListing"
> 
> 
> 
> cleanEx()
> nameEx("grid.move.to")
> ### * grid.move.to
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.move.to
> ### Title: Move or Draw to a Specified Position
> ### Aliases: grid.move.to grid.line.to moveToGrob lineToGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.newpage()
> grid.move.to(0.5, 0.5)
> grid.line.to(1, 1)
> grid.line.to(0.5, 0)
> pushViewport(viewport(x=0, y=0, width=0.25, height=0.25, just=c("left", "bottom")))
> grid.rect()
> grid.grill()
> grid.line.to(0.5, 0.5)
> popViewport()
> 
> 
> 
> cleanEx()
> nameEx("grid.null")
> ### * grid.null
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.null
> ### Title: Null Graphical Object
> ### Aliases: grid.null nullGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.newpage()
> grid.null(name="ref")
> grid.rect(height=grobHeight("ref"))
> grid.segments(0, 0, grobX("ref", 0), grobY("ref", 0))
> 
> 
> 
> cleanEx()
> nameEx("grid.path")
> ### * grid.path
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.path
> ### Title: Draw a Path
> ### Aliases: grid.path pathGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> pathSample <- function(x, y, rule, gp = gpar()) {
+     if (is.na(rule))
+         grid.path(x, y, id = rep(1:2, each = 4), gp = gp)
+     else
+         grid.path(x, y, id = rep(1:2, each = 4), rule = rule, gp = gp)
+     if (!is.na(rule))
+         grid.text(paste("Rule:", rule), y = 0, just = "bottom")
+ }
> 
> pathTriplet <- function(x, y, title) {
+     pushViewport(viewport(height = 0.9, layout = grid.layout(1, 3),
+                           gp = gpar(cex = .7)))
+     grid.rect(y = 1, height = unit(1, "char"), just = "top",
+               gp = gpar(col = NA, fill = "grey"))
+     grid.text(title, y = 1, just = "top")
+     pushViewport(viewport(layout.pos.col = 1))
+     pathSample(x, y, rule = "winding",
+                gp = gpar(fill = "grey"))
+     popViewport()
+     pushViewport(viewport(layout.pos.col = 2))
+     pathSample(x, y, rule = "evenodd",
+                gp = gpar(fill = "grey"))
+     popViewport()
+     pushViewport(viewport(layout.pos.col = 3))
+     pathSample(x, y, rule = NA)
+     popViewport()
+     popViewport()
+ }
> 
> pathTest <- function() {
+     grid.newpage()
+     pushViewport(viewport(layout = grid.layout(5, 1)))
+     pushViewport(viewport(layout.pos.row = 1))
+     pathTriplet(c(.1, .1, .9, .9, .2, .2, .8, .8),
+                 c(.1, .9, .9, .1, .2, .8, .8, .2),
+                 "Nested rectangles, both clockwise")
+     popViewport()
+     pushViewport(viewport(layout.pos.row = 2))
+     pathTriplet(c(.1, .1, .9, .9, .2, .8, .8, .2),
+                 c(.1, .9, .9, .1, .2, .2, .8, .8),
+                 "Nested rectangles, outer clockwise, inner anti-clockwise")
+     popViewport()
+     pushViewport(viewport(layout.pos.row = 3))
+     pathTriplet(c(.1, .1, .4, .4, .6, .9, .9, .6),
+                 c(.1, .4, .4, .1, .6, .6, .9, .9),
+                 "Disjoint rectangles")
+     popViewport()
+     pushViewport(viewport(layout.pos.row = 4))
+     pathTriplet(c(.1, .1, .6, .6, .4, .4, .9, .9),
+                 c(.1, .6, .6, .1, .4, .9, .9, .4),
+                 "Overlapping rectangles, both clockwise")
+     popViewport()
+     pushViewport(viewport(layout.pos.row = 5))
+     pathTriplet(c(.1, .1, .6, .6, .4, .9, .9, .4),
+                 c(.1, .6, .6, .1, .4, .4, .9, .9),
+                 "Overlapping rectangles, one clockwise, other anti-clockwise")
+     popViewport()
+     popViewport()
+ }
> 
> pathTest()
> 
> # Drawing multiple paths at once
> holed_rect <- cbind(c(.15, .15, -.15, -.15, .1, .1, -.1, -.1), 
+                     c(.15, -.15, -.15, .15, .1, -.1, -.1, .1))
> holed_rects <- rbind(
+     holed_rect + matrix(c(.7, .2), nrow = 8, ncol = 2, byrow = TRUE),
+     holed_rect + matrix(c(.7, .8), nrow = 8, ncol = 2, byrow = TRUE),
+     holed_rect + matrix(c(.2, .5), nrow = 8, ncol = 2, byrow = TRUE)
+ )
> grid.newpage()
> grid.path(x = holed_rects[, 1], y = holed_rects[, 2], 
+           id = rep(1:6, each = 4), pathId = rep(1:3, each = 8),
+           gp = gpar(fill = c('red', 'blue', 'green')),
+           rule = 'evenodd')
> 
> # Not specifying pathId will treat all points as part of the same path, thus 
> # having same fill
> grid.newpage()
> grid.path(x = holed_rects[, 1], y = holed_rects[, 2], 
+           id = rep(1:6, each = 4),
+           gp = gpar(fill = c('red', 'blue', 'green')),
+           rule = 'evenodd')
> 
> 
> 
> cleanEx()
> nameEx("grid.plot.and.legend")
> ### * grid.plot.and.legend
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.plot.and.legend
> ### Title: A Simple Plot and Legend Demo
> ### Aliases: grid.plot.and.legend
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.plot.and.legend()
> 
> 
> 
> cleanEx()
> nameEx("grid.polygon")
> ### * grid.polygon
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.polygon
> ### Title: Draw a Polygon
> ### Aliases: grid.polygon polygonGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.polygon()
> # Using id (NOTE: locations are not in consecutive blocks)
> grid.newpage()
> grid.polygon(x=c((0:4)/10, rep(.5, 5), (10:6)/10, rep(.5, 5)),
+              y=c(rep(.5, 5), (10:6/10), rep(.5, 5), (0:4)/10),
+              id=rep(1:5, 4),
+              gp=gpar(fill=1:5))
> # Using id.lengths
> grid.newpage()
> grid.polygon(x=outer(c(0, .5, 1, .5), 5:1/5),
+              y=outer(c(.5, 1, .5, 0), 5:1/5),
+              id.lengths=rep(4, 5),
+              gp=gpar(fill=1:5))
> 
> 
> 
> cleanEx()
> nameEx("grid.raster")
> ### * grid.raster
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.raster
> ### Title: Render a raster object
> ### Aliases: grid.raster rasterGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> redGradient <- matrix(hcl(0, 80, seq(50, 80, 10)),
+                       nrow=4, ncol=5)
> # interpolated
> grid.newpage()
> grid.raster(redGradient)
> # blocky
> grid.newpage()
> grid.raster(redGradient, interpolate=FALSE)
> # blocky and stretched
> grid.newpage()
> grid.raster(redGradient, interpolate=FALSE, height=unit(1, "npc"))
> 
> # The same raster drawn several times
> grid.newpage()
> grid.raster(0, x=1:3/4, y=1:3/4, width=.1, interpolate=FALSE)
> 
> 
> 
> cleanEx()
> nameEx("grid.record")
> ### * grid.record
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.record
> ### Title: Encapsulate calculations and drawing
> ### Aliases: grid.record recordGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.record({
+               w <- convertWidth(unit(1, "inches"), "npc")
+               grid.rect(width=w)
+             },
+             list())
> 
> 
> 
> cleanEx()
> nameEx("grid.reorder")
> ### * grid.reorder
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.reorder
> ### Title: Reorder the children of a gTree
> ### Aliases: grid.reorder reorderGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> # gTree with two children, "red-rect" and "blue-rect" (in that order)
> gt <- gTree(children=gList(
+                 rectGrob(gp=gpar(col=NA, fill="red"),
+                          width=.8, height=.2, name="red-rect"),
+                 rectGrob(gp=gpar(col=NA, fill="blue"),
+                          width=.2, height=.8, name="blue-rect")),
+             name="gt")
> grid.newpage()
> grid.draw(gt)
> # Spec entire order as numeric (blue-rect, red-rect)
> grid.reorder("gt", 2:1)
> # Spec entire order as character
> grid.reorder("gt", c("red-rect", "blue-rect"))
> # Only spec the one I want behind as character
> grid.reorder("gt", "blue-rect")
> # Only spec the one I want in front as character
> grid.reorder("gt", "blue-rect", back=FALSE)
> 
> 
> 
> cleanEx()
> nameEx("grid.roundrect")
> ### * grid.roundrect
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: roundrect
> ### Title: Draw a rectangle with rounded corners
> ### Aliases: roundrect grid.roundrect roundrectGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.roundrect(width=.5, height=.5, name="rr")
> theta <- seq(0, 360, length.out=50)
> for (i in 1:50)
+     grid.circle(x=grobX("rr", theta[i]),
+                 y=grobY("rr", theta[i]),
+                 r=unit(1, "mm"),
+                 gp=gpar(fill="black"))
> 
> 
> 
> cleanEx()
> nameEx("grid.show.layout")
> ### * grid.show.layout
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.show.layout
> ### Title: Draw a Diagram of a Grid Layout
> ### Aliases: grid.show.layout
> ### Keywords: dplot
> 
> ### ** Examples
> 
> ## Diagram of a simple layout
> grid.show.layout(grid.layout(4,2,
+                      heights=unit(rep(1, 4),
+                                   c("lines", "lines", "lines", "null")),
+                      widths=unit(c(1, 1), "inches")))
> 
> 
> 
> cleanEx()
> nameEx("grid.show.viewport")
> ### * grid.show.viewport
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.show.viewport
> ### Title: Draw a Diagram of a Grid Viewport
> ### Aliases: grid.show.viewport
> ### Keywords: dplot
> 
> ### ** Examples
> 
> ## Diagram of a sample viewport
> grid.show.viewport(viewport(x=0.6, y=0.6,
+                             width=unit(1, "inches"), height=unit(1, "inches")))
> grid.show.viewport(viewport(layout.pos.row=2, layout.pos.col=2:3),
+                    grid.layout(3, 4))
> 
> 
> 
> cleanEx()
> nameEx("grid.stroke")
> ### * grid.stroke
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.stroke
> ### Title: Stroke or Fill a Path
> ### Aliases: grid.stroke strokeGrob strokeGrob.grob strokeGrob.GridPath
> ###   grid.fill fillGrob fillGrob.grob fillGrob.GridPath grid.fillStroke
> ###   fillStrokeGrob fillStrokeGrob.grob fillStrokeGrob.GridPath as.path
> ### Keywords: dplot
> 
> ### ** Examples
> 
> ## NOTE: on devices without support for stroking and filling
> ##       nothing will be drawn
> grid.newpage()
> grid.stroke(textGrob("hello", gp=gpar(cex=10)))
> grid.fill(circleGrob(1:2/3, r=.3), gp=gpar(fill=rgb(1,0,0,.5)))
> 
> 
> 
> cleanEx()
> nameEx("grid.text")
> ### * grid.text
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.text
> ### Title: Draw Text
> ### Aliases: grid.text textGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.newpage()
> x <- stats::runif(20)
> y <- stats::runif(20)
> rot <- stats::runif(20, 0, 360)
> grid.text("SOMETHING NICE AND BIG", x=x, y=y, rot=rot,
+           gp=gpar(fontsize=20, col="grey"))
> grid.text("SOMETHING NICE AND BIG", x=x, y=y, rot=rot,
+           gp=gpar(fontsize=20), check.overlap=TRUE)
> 
> grid.newpage() ## plotmath example
> grid.text(quote(frac(e^{-x^2/2}, sqrt(2*pi))), x=x, y=y, rot=stats::runif(20, -45,45),
+           gp=gpar(fontsize=17, col=4), check.overlap=TRUE)
> 
> grid.newpage()
> draw.text <- function(just, i, j) {
+   grid.text("ABCD", x=x[j], y=y[i], just=just)
+   grid.text(deparse(substitute(just)), x=x[j], y=y[i] + unit(2, "lines"),
+             gp=gpar(col="grey", fontsize=8))
+ }
> x <- unit(1:4/5, "npc")
> y <- unit(1:4/5, "npc")
> grid.grill(h=y, v=x, gp=gpar(col="grey"))
> draw.text(c("bottom"), 1, 1)
> draw.text(c("left", "bottom"), 2, 1)
> draw.text(c("right", "bottom"), 3, 1)
> draw.text(c("centre", "bottom"), 4, 1)
> draw.text(c("centre"), 1, 2)
> draw.text(c("left", "centre"), 2, 2)
> draw.text(c("right", "centre"), 3, 2)
> draw.text(c("centre", "centre"), 4, 2)
> draw.text(c("top"), 1, 3)
> draw.text(c("left", "top"), 2, 3)
> draw.text(c("right", "top"), 3, 3)
> draw.text(c("centre", "top"), 4, 3)
> draw.text(c(), 1, 4)
> draw.text(c("left"), 2, 4)
> draw.text(c("right"), 3, 4)
> draw.text(c("centre"), 4, 4)
> 
> 
> 
> cleanEx()
> nameEx("grid.xspline")
> ### * grid.xspline
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: grid.xspline
> ### Title: Draw an Xspline
> ### Aliases: grid.xspline xsplineGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
> x <- c(0.25, 0.25, 0.75, 0.75)
> y <- c(0.25, 0.75, 0.75, 0.25)
> 
> xsplineTest <- function(s, i, j, open) {
+   pushViewport(viewport(layout.pos.col=j, layout.pos.row=i))
+   grid.points(x, y, default.units="npc", pch=16, size=unit(2, "mm"))
+   grid.xspline(x, y, shape=s, open=open, gp=gpar(fill="grey"))
+   grid.text(s, gp=gpar(col="grey"),
+             x=unit(x, "npc") + unit(c(-1, -1, 1, 1), "mm"),
+             y=unit(y, "npc") + unit(c(-1, 1, 1, -1), "mm"),
+             hjust=c(1, 1, 0, 0),
+             vjust=c(1, 0, 0, 1))
+   popViewport()
+ }
> 
> pushViewport(viewport(width=.5, x=0, just="left",
+                       layout=grid.layout(3, 3, respect=TRUE)))
> pushViewport(viewport(layout.pos.row=1))
> grid.text("Open Splines", y=1, just="bottom")
> popViewport()
> xsplineTest(c(0, -1, -1, 0), 1, 1, TRUE)
> xsplineTest(c(0, -1,  0, 0), 1, 2, TRUE)
> xsplineTest(c(0, -1,  1, 0), 1, 3, TRUE)
> xsplineTest(c(0,  0, -1, 0), 2, 1, TRUE)
> xsplineTest(c(0,  0,  0, 0), 2, 2, TRUE)
> xsplineTest(c(0,  0,  1, 0), 2, 3, TRUE)
> xsplineTest(c(0,  1, -1, 0), 3, 1, TRUE)
> xsplineTest(c(0,  1,  0, 0), 3, 2, TRUE)
> xsplineTest(c(0,  1,  1, 0), 3, 3, TRUE)
> popViewport()
> pushViewport(viewport(width=.5, x=1, just="right",
+                       layout=grid.layout(3, 3, respect=TRUE)))
> pushViewport(viewport(layout.pos.row=1))
> grid.text("Closed Splines", y=1, just="bottom")
> popViewport()
> xsplineTest(c(-1, -1, -1, -1), 1, 1, FALSE)
> xsplineTest(c(-1, -1,  0, -1), 1, 2, FALSE)
> xsplineTest(c(-1, -1,  1, -1), 1, 3, FALSE)
> xsplineTest(c( 0,  0, -1,  0), 2, 1, FALSE)
> xsplineTest(c( 0,  0,  0,  0), 2, 2, FALSE)
> xsplineTest(c( 0,  0,  1,  0), 2, 3, FALSE)
> xsplineTest(c( 1,  1, -1,  1), 3, 1, FALSE)
> xsplineTest(c( 1,  1,  0,  1), 3, 2, FALSE)
> xsplineTest(c( 1,  1,  1,  1), 3, 3, FALSE)
> popViewport()
> 
> 
> 
> cleanEx()
> nameEx("legendGrob")
> ### * legendGrob
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: legendGrob
> ### Title: Constructing a Legend Grob
> ### Aliases: legendGrob grid.legend
> ### Keywords: aplot
> 
> ### ** Examples
> 
>   ## Data:
>   n <- 10
>   x <- stats::runif(n) ; y1 <- stats::runif(n) ; y2 <- stats::runif(n)
>   ## Construct the grobs :
>   plot <- gTree(children=gList(rectGrob(),
+                   pointsGrob(x, y1, pch=21, gp=gpar(col=2, fill="gray")),
+                   pointsGrob(x, y2, pch=22, gp=gpar(col=3, fill="gray")),
+                   xaxisGrob(),
+                   yaxisGrob()))
>   legd <- legendGrob(c("Girls", "Boys", "Other"), pch=21:23,
+                      gp=gpar(col = 2:4, fill = "gray"))
>   gg <- packGrob(packGrob(frameGrob(), plot),
+                  legd, height=unit(1,"null"), side="right")
> 
>   ## Now draw it on a new device page:
>   grid.newpage()
>   pushViewport(viewport(width=0.8, height=0.8))
>   grid.draw(gg)
> 
> 
> 
> cleanEx()
> nameEx("resolveRasterSize")
> ### * resolveRasterSize
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: resolveRasterSize
> ### Title: Utility function to resolve the size of a raster grob
> ### Aliases: resolveRasterSize
> ### Keywords: dplot
> 
> ### ** Examples
> 
> # Square raster
> rg <- rasterGrob(matrix(0))
> # Fill the complete page (if page is square)
> grid.newpage()
> resolveRasterSize(rg)$height
[1] 6.8inches
> grid.draw(rg)
> # Forced to fit tall thin region
> grid.newpage()
> pushViewport(viewport(width=.1))
> resolveRasterSize(rg)$height
[1] 0.68inches
> grid.draw(rg)
> 
> 
> 
> cleanEx()
> nameEx("showGrob")
> ### * showGrob
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: showGrob
> ### Title: Label grid grobs
> ### Aliases: showGrob
> ### Keywords: dplot
> 
> ### ** Examples
> 
>     grid.newpage()
>     gt <- gTree(childrenvp=vpStack(
+                   viewport(x=0, width=.5, just="left", name="vp"),
+                   viewport(y=.5, height=.5, just="bottom", name="vp2")),
+                 children=gList(rectGrob(vp="vp::vp2", name="child")),
+                 name="parent")
>     grid.draw(gt)
>     showGrob()
>     showGrob(gPath="child")
>     showGrob(recurse=FALSE)
>     showGrob(depth=1)
>     showGrob(depth=2)
>     showGrob(depth=1:2)
>     showGrob(gt)
>     showGrob(gt, gPath="child")
>     showGrob(just="left", gp=gpar(col="red", cex=.5), rot=45)
>     showGrob(labelfun=function(grob, ...) {
+         x <- grobX(grob, "west")
+         y <- grobY(grob, "north")
+         gTree(children=gList(rectGrob(x=x, y=y,
+                 width=stringWidth(grob$name) + unit(2, "mm"),
+                 height=stringHeight(grob$name) + unit(2, "mm"),
+                 gp=gpar(col=NA, fill=rgb(1, 0, 0, .5)),
+                 just=c("left", "top")),
+                 textGrob(grob$name,
+                          x=x + unit(1, "mm"), y=y - unit(1, "mm"),
+                          just=c("left", "top"))))
+     })
> 
> ## Not run: 
> ##D     # Examples from higher-level packages
> ##D 
> ##D     library(lattice)
> ##D     # Ctrl-c after first example
> ##D     example(histogram)
> ##D     showGrob()
> ##D     showGrob(gPath="plot_01.ylab")
> ##D 
> ##D     library(ggplot2)
> ##D     # Ctrl-c after first example
> ##D     example(qplot)
> ##D     showGrob()
> ##D     showGrob(recurse=FALSE)
> ##D     showGrob(gPath="panel-3-3")
> ##D     showGrob(gPath="axis.title", grep=TRUE)
> ##D     showGrob(depth=2)
> ## End(Not run)
> 
> 
> 
> cleanEx()
> nameEx("showViewport")
> ### * showViewport
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: showViewport
> ### Title: Display grid viewports
> ### Aliases: showViewport
> ### Keywords: dplot
> 
> ### ** Examples
> 
> showViewport(viewport(width=.5, height=.5, name="vp"))
> 
> grid.newpage()
> pushViewport(viewport(width=.5, height=.5, name="vp"))
> upViewport()
> showViewport(vpPath("vp"))
> 
> showViewport(vpStack(viewport(width=.5, height=.5, name="vp1"),
+                      viewport(width=.5, height=.5, name="vp2")),
+              newpage=TRUE)
> 
> showViewport(vpStack(viewport(width=.5, height=.5, name="vp1"),
+                      viewport(width=.5, height=.5, name="vp2")),
+              fill=rgb(1:0, 0:1, 0, .1),
+              newpage=TRUE)
> 
> 
> 
> cleanEx()
> nameEx("unit")
> ### * unit
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: unit
> ### Title: Function to Create a Unit Object
> ### Aliases: unit is.unit
> ### Keywords: dplot
> 
> ### ** Examples
> 
> unit(1, "npc")
[1] 1npc
> unit(1:3/4, "npc")
[1] 0.25npc 0.5npc  0.75npc
> unit(1:3/4, "npc") + unit(1, "inches")
[1] sum(0.25npc, 1inches) sum(0.5npc, 1inches)  sum(0.75npc, 1inches)
> min(unit(0.5, "npc"), unit(1, "inches"))
[1] min(0.5npc, 1inches)
> unit.c(unit(0.5, "npc"), unit(2, "inches") + unit(1:3/4, "npc"),
+        unit(1, "strwidth", "hi there"))
[1] 0.5npc                sum(2inches, 0.25npc) sum(2inches, 0.5npc) 
[4] sum(2inches, 0.75npc) 1strwidth            
> x <- unit(1:5, "npc")
> x[2:4]
[1] 2npc 3npc 4npc
> x[2:4] <- unit(1, "mm")
> x
[1] 1npc 1mm  1mm  1mm  5npc
> 
> 
> 
> cleanEx()
> nameEx("unit.length")
> ### * unit.length
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: unit.length
> ### Title: Length of a Unit Object
> ### Aliases: unit.length
> ### Keywords: dplot
> 
> ### ** Examples
> 
> length(unit(1:3, "npc"))
[1] 3
> length(unit(1:3, "npc") + unit(1, "inches"))
[1] 3
> length(max(unit(1:3, "npc") + unit(1, "inches")))
[1] 1
> length(max(unit(1:3, "npc") + unit(1, "strwidth", "a"))*4)
[1] 1
> length(unit(1:3, "npc") + unit(1, "strwidth", "a")*4)
[1] 3
> 
> 
> 
> cleanEx()
> nameEx("unit.pmin")
> ### * unit.pmin
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: unit.pmin
> ### Title: Parallel Unit Minima and Maxima
> ### Aliases: unit.pmin unit.pmax unit.psum
> ### Keywords: dplot
> 
> ### ** Examples
> 
> max(unit(1:3, "cm"), unit(0.5, "npc"))
[1] max(1cm, 2cm, 3cm, 0.5npc)
> unit.pmax(unit(1:3, "cm"), unit(0.5, "npc"))
[1] max(1cm, 0.5npc) max(2cm, 0.5npc) max(3cm, 0.5npc)
> 
> 
> 
> cleanEx()
> nameEx("unit.rep")
> ### * unit.rep
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: unit.rep
> ### Title: Replicate Elements of Unit Objects
> ### Aliases: unit.rep
> ### Keywords: dplot
> 
> ### ** Examples
> 
> rep(unit(1:3, "npc"), 3)
[1] 1npc 2npc 3npc 1npc 2npc 3npc 1npc 2npc 3npc
> rep(unit(1:3, "npc"), 1:3)
[1] 1npc 2npc 2npc 3npc 3npc 3npc
> rep(unit(1:3, "npc") + unit(1, "inches"), 3)
[1] sum(1npc, 1inches) sum(2npc, 1inches) sum(3npc, 1inches) sum(1npc, 1inches)
[5] sum(2npc, 1inches) sum(3npc, 1inches) sum(1npc, 1inches) sum(2npc, 1inches)
[9] sum(3npc, 1inches)
> rep(max(unit(1:3, "npc") + unit(1, "inches")), 3)
[1] max(sum(1npc, 1inches), sum(2npc, 1inches), sum(3npc, 1inches))
[2] max(sum(1npc, 1inches), sum(2npc, 1inches), sum(3npc, 1inches))
[3] max(sum(1npc, 1inches), sum(2npc, 1inches), sum(3npc, 1inches))
> rep(max(unit(1:3, "npc") + unit(1, "strwidth", "a"))*4, 3)
[1] 4*max(sum(1npc, 1strwidth), sum(2npc, 1strwidth), sum(3npc, 1strwidth))
[2] 4*max(sum(1npc, 1strwidth), sum(2npc, 1strwidth), sum(3npc, 1strwidth))
[3] 4*max(sum(1npc, 1strwidth), sum(2npc, 1strwidth), sum(3npc, 1strwidth))
> rep(unit(1:3, "npc") + unit(1, "strwidth", "a")*4, 3)
[1] sum(1npc, 4strwidth) sum(2npc, 4strwidth) sum(3npc, 4strwidth)
[4] sum(1npc, 4strwidth) sum(2npc, 4strwidth) sum(3npc, 4strwidth)
[7] sum(1npc, 4strwidth) sum(2npc, 4strwidth) sum(3npc, 4strwidth)
> 
> 
> 
> cleanEx()
> nameEx("unitType")
> ### * unitType
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: unitType
> ### Title: Return the Units of a Unit Object
> ### Aliases: unitType
> ### Keywords: dplot
> 
> ### ** Examples
> 
> u <- unit(1:5, c("cm", "mm", "in", "pt", "null"))
> 
> unitType(u)
[1] "cm"     "mm"     "inches" "points" "null"  
> unitType(unit(1, "npc"))
[1] "npc"
> unitType(unit(1:3/4, "npc"))
[1] "npc" "npc" "npc"
> unitType(unit(1:3/4, "npc") + unit(1, "inches"))
[1] "sum" "sum" "sum"
> unitType(min(unit(0.5, "npc"), unit(1, "inches")))
[1] "min"
> unitType(unit.c(unit(0.5, "npc"), unit(2, "inches") + unit(1:3/4, "npc"),
+                 unit(1, "strwidth", "hi there")))
[1] "npc"      "sum"      "sum"      "sum"      "strwidth"
> unitType(min(unit(1, "in"), unit(1, "npc") + unit(1, "mm")))
[1] "min"
> 
> unitType(u, recurse=TRUE)
$cm
[1] "cm"

$mm
[1] "mm"

$inches
[1] "inches"

$points
[1] "points"

$null
[1] "null"

> unitType(unit(1, "npc"), recurse=TRUE)
$npc
[1] "npc"

> unitType(unit(1:3/4, "npc"), recurse=TRUE)
$npc
[1] "npc"

$npc
[1] "npc"

$npc
[1] "npc"

> unitType(unit(1:3/4, "npc") + unit(1, "inches"), recurse=TRUE)
$sum
$sum$npc
[1] "npc"

$sum$inches
[1] "inches"


$sum
$sum$npc
[1] "npc"

$sum$inches
[1] "inches"


$sum
$sum$npc
[1] "npc"

$sum$inches
[1] "inches"


> unitType(min(unit(0.5, "npc"), unit(1, "inches")), recurse=TRUE)
$min
$min$npc
[1] "npc"

$min$inches
[1] "inches"


> unitType(unit.c(unit(0.5, "npc"), unit(2, "inches") + unit(1:3/4, "npc"),
+                 unit(1, "strwidth", "hi there")), recurse=TRUE)
$npc
[1] "npc"

$sum
$sum$inches
[1] "inches"

$sum$npc
[1] "npc"


$sum
$sum$inches
[1] "inches"

$sum$npc
[1] "npc"


$sum
$sum$inches
[1] "inches"

$sum$npc
[1] "npc"


$strwidth
[1] "strwidth"

> unitType(min(unit(1, "in"), unit(1, "npc") + unit(1, "mm")), recurse=TRUE)
$min
$min$inches
[1] "inches"

$min$sum
$min$sum$npc
[1] "npc"

$min$sum$mm
[1] "mm"



> unlist(unitType(min(unit(1, "in"), unit(1, "npc") + unit(1, "mm")),
+                 recurse=TRUE))
 min.inches min.sum.npc  min.sum.mm 
   "inches"       "npc"        "mm" 
> 
> 
> 
> cleanEx()
> nameEx("viewport")
> ### * viewport
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: Grid Viewports
> ### Title: Create a Grid Viewport
> ### Aliases: viewport vpList vpStack vpTree
> ### Keywords: dplot
> 
> ### ** Examples
> 
> # Diagram of a sample viewport
> grid.show.viewport(viewport(x=0.6, y=0.6,
+                    width=unit(1, "inches"), height=unit(1, "inches")))
> # Demonstrate viewport clipping
> clip.demo <- function(i, j, clip1, clip2) {
+   pushViewport(viewport(layout.pos.col=i,
+                          layout.pos.row=j))
+   pushViewport(viewport(width=0.6, height=0.6, clip=clip1))
+   grid.rect(gp=gpar(fill="white"))
+   grid.circle(r=0.55, gp=gpar(col="red", fill="pink"))
+   popViewport()
+   pushViewport(viewport(width=0.6, height=0.6, clip=clip2))
+   grid.polygon(x=c(0.5, 1.1, 0.6, 1.1, 0.5, -0.1, 0.4, -0.1),
+                y=c(0.6, 1.1, 0.5, -0.1, 0.4, -0.1, 0.5, 1.1),
+                gp=gpar(col="blue", fill="light blue"))
+   popViewport(2)
+ }
> 
> grid.newpage()
> grid.rect(gp=gpar(fill="grey"))
> pushViewport(viewport(layout=grid.layout(2, 2)))
> clip.demo(1, 1, FALSE, FALSE)
> clip.demo(1, 2, TRUE, FALSE)
> clip.demo(2, 1, FALSE, TRUE)
> clip.demo(2, 2, TRUE, TRUE)
> popViewport()
> # Demonstrate turning clipping off
> grid.newpage()
> pushViewport(viewport(width=.5, height=.5, clip="on"))
> grid.rect()
> grid.circle(r=.6, gp=gpar(lwd=10))
> pushViewport(viewport(clip="inherit"))
> grid.circle(r=.6, gp=gpar(lwd=5, col="grey"))
> pushViewport(viewport(clip="off"))
> grid.circle(r=.6)
> popViewport(3)
> # Demonstrate vpList, vpStack, and vpTree
> grid.newpage()
> tree <- vpTree(viewport(width=0.8, height=0.8, name="A"),
+                vpList(vpStack(viewport(x=0.1, y=0.1, width=0.5, height=0.5,
+                                        just=c("left", "bottom"), name="B"),
+                               viewport(x=0.1, y=0.1, width=0.5, height=0.5,
+                                        just=c("left", "bottom"), name="C"),
+                               viewport(x=0.1, y=0.1, width=0.5, height=0.5,
+                                        just=c("left", "bottom"), name="D")),
+                       viewport(x=0.5, width=0.4, height=0.9,
+                                just="left", name="E")))
> pushViewport(tree)
> for (i in LETTERS[1:5]) {
+   seekViewport(i)
+   grid.rect()
+   grid.text(current.vpTree(FALSE),
+             x=unit(1, "mm"), y=unit(1, "npc") - unit(1, "mm"),
+             just=c("left", "top"),
+             gp=gpar(fontsize=8))
+ }
> 
> 
> 
> cleanEx()
> nameEx("viewportTransform")
> ### * viewportTransform
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: viewportTransform
> ### Title: Define a Group Transformation
> ### Aliases: viewportTransform viewportTranslate viewportScale
> ###   viewportRotate defnTranslate defnScale defnRotate useTranslate
> ###   useScale useRotate groupTranslate groupScale groupRotate groupShear
> ###   groupFlip
> ### Keywords: dplot
> 
> ### ** Examples
> 
> ## NOTE: on devices without support for groups nothing will be drawn
> grid.newpage()
> ## Define and use group in same viewport
> pushViewport(viewport(width=.2, height=.2))
> grid.define(circleGrob(gp=gpar(lwd=5)), name="circle")
> grid.use("circle")
> popViewport()
> ## Use group in viewport that is translated and scaled
> pushViewport(viewport(x=.2, y=.2, width=.1, height=.1))
> grid.use("circle")
> popViewport()
> ## Use group in viewport that is translated and scaled
> ## BUT only make use of the translation
> pushViewport(viewport(x=.2, y=.8, width=.1, height=.1))
> grid.use("circle", transform=viewportTranslate)
> popViewport()
> ## Use group in viewport that is translated and scaled
> ## unevenly (distorted)
> pushViewport(viewport(x=.8, y=.7, width=.2, height=.4))
> grid.use("circle")
> popViewport()
> 
> 
> 
> cleanEx()
> nameEx("viewports")
> ### * viewports
> 
> flush(stderr()); flush(stdout())
> 
> ### 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)
> 
> 
> 
> cleanEx()
> nameEx("vpPath")
> ### * vpPath
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: vpPath
> ### Title: Concatenate Viewport Names
> ### Aliases: vpPath
> ### Keywords: dplot
> 
> ### ** Examples
> 
> vpPath("vp1", "vp2")
vp1::vp2 
> 
> 
> 
> cleanEx()
> nameEx("xsplinePoints")
> ### * xsplinePoints
> 
> flush(stderr()); flush(stdout())
> 
> ### Name: xsplinePoints
> ### Title: Return the points that would be used to draw an xspline (or a
> ###   Bezier curve)
> ### Aliases: xsplinePoints bezierPoints
> ### Keywords: dplot
> 
> ### ** Examples
> 
> grid.newpage()
> xsg <- xsplineGrob(c(.1, .1, .9, .9), c(.1, .9, .9, .1), shape=1)
> grid.draw(xsg)
> trace <- xsplinePoints(xsg)
> grid.circle(trace$x, trace$y, default.units="inches", r=unit(.5, "mm"))
> 
> grid.newpage()
> vp <- viewport(width=.5)
> xg <- xsplineGrob(x=c(0, .2, .4, .2, .5, .7, .9, .7),
+                   y=c(.5, 1, .5, 0, .5, 1, .5, 0),
+                   id=rep(1:2, each=4),
+                   shape=1,
+                   vp=vp)
> grid.draw(xg)
> trace <- xsplinePoints(xg)
> pushViewport(vp)
> invisible(lapply(trace, function(t) grid.lines(t$x, t$y, gp=gpar(col="red"))))
> popViewport()
> 
> grid.newpage()
> bg <- bezierGrob(c(.2, .2, .8, .8), c(.2, .8, .8, .2))
> grid.draw(bg)
> trace <- bezierPoints(bg)
> grid.circle(trace$x, trace$y, default.units="inches", r=unit(.5, "mm"))
> 
> 
> 
> ### * <FOOTER>
> ###
> cleanEx()
> options(digits = 7L)
> base::cat("Time elapsed: ", proc.time() - base::get("ptime", pos = 'CheckExEnv'),"\n")
Time elapsed:  0.464 0.026 0.493 0 0 
> grDevices::dev.off()
null device 
          1 
> ###
> ### Local variables: ***
> ### mode: outline-minor ***
> ### outline-regexp: "\\(> \\)?### [*]+" ***
> ### End: ***
> quit('no')