grid.grab {grid} | R Documentation |
Creates a gTree object from the current grid display list or from a scene generated by user-specified code.
grid.grab(warn = 2, wrap = wrap.grobs, wrap.grobs = FALSE, ...) grid.grabExpr(expr, warn = 2, wrap = wrap.grobs, wrap.grobs = FALSE, width = 7, height = 7, device = offscreen, ...)
expr |
An expression to be evaluated. Typically, some calls to grid drawing functions. |
warn |
An integer specifying the amount of warnings to emit. 0 means no warnings, 1 means warn when it is certain that the grab will not faithfully represent the original scene. 2 means warn if there's any possibility that the grab will not faithfully represent the original scene. |
wrap |
A logical indicating how the output should
be captured. If |
wrap.grobs |
A logical indicating whether, if we are wrapping
elements ( |
width, height |
Size of the device used for temporary rendering. |
device |
A function that opens a graphics device for temporary
rendering. By default this is an off-screen, in-memory device
based on the |
... |
arguments passed to gTree, for example, a name and/or class for the gTree that is created. |
There are four ways to capture grid output as a gTree.
There are two functions for capturing output:
use grid.grab
to capture an existing drawing
and grid.grabExpr
to capture the output from
an expression (without drawing anything).
For each of these functions, the output can be captured in two ways. One way tries to be clever and make a gTree with a childrenvp slot containing all viewports on the display list (including those that are popped) and every grob on the display list as a child of the new gTree; each child has a vpPath in the vp slot so that it is drawn in the appropriate viewport. In other words, the gTree contains all elements on the display list, but in a slightly altered form.
The other way, wrap=TRUE
,
is to create a grob for every element on the
display list (and make all of those grobs children of the
gTree). Only viewports are
wrapped unless wrap.grobs
is also TRUE
.
The first approach creates a more compact and elegant gTree, which is more flexible to work with, but is not guaranteed to faithfully replicate all possible grid output. The second approach is more brute force, and harder to work with, but is more likely to replicate the original output.
An example of a case that will NOT be replicated by wrapping,
with wrap.grobs=TRUE
, is
a scene where the placement of one grob is dependent on another grob
(e.g., via grobX
or grobWidth
).
A gTree object.
pushViewport(viewport(w=.5, h=.5)) grid.rect() grid.points(stats::runif(10), stats::runif(10)) popViewport() grab <- grid.grab() grid.newpage() grid.draw(grab)