grid.path {grid}R Documentation

Draw a Path

Description

These functions create and draw a path. The final point will automatically be connected to the initial point.

Usage

pathGrob(x, y,
         id=NULL, id.lengths=NULL,
         rule="winding",
         default.units="npc",
         name=NULL, gp=gpar(), vp=NULL)
grid.path(...)

Arguments

x A numeric vector or unit object specifying x-locations.
y A numeric vector or unit object specifying y-locations.
id A numeric vector used to separate locations in x and y into sub-paths. All locations with the same id belong to the same sub-path.
id.lengths A numeric vector used to separate locations in x and y into sub-paths. Specifies consecutive blocks of locations which make up separate sub-paths.
rule A character value specifying the fill rule: either "winding" or "evenodd".
default.units A string indicating the default units to use if x or y are only given as numeric vectors.
name A character identifier.
gp An object of class gpar, typically the output from a call to the function gpar. This is basically a list of graphical parameter settings.
vp A Grid viewport object (or NULL).
... Arguments passed to pathGrob().

Details

Both functions create a path grob (a graphical object describing a path), but only grid.path draws the path (and then only if draw is TRUE).

A path is like a polygon except that the former can contain holes, as interpreted by the fill rule; these fill a region if the path border encircles it an odd or non-zero number of times, respectively.

Value

A grob object.

Author(s)

Paul Murrell

See Also

Grid, viewport

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(x=c(.1, .1, .9, .9, .2, .2, .8, .8),
                y=c(.1, .9, .9, .1, .2, .8, .8, .2),
                title="Nested rectangles, both clockwise")
    popViewport()
    pushViewport(viewport(layout.pos.row=2))
    pathTriplet(x=c(.1, .1, .9, .9, .2, .8, .8, .2),
                y=c(.1, .9, .9, .1, .2, .2, .8, .8),
                title="Nested rectangles, outer clockwise, inner anti-clockwise")
    popViewport()
    pushViewport(viewport(layout.pos.row=3))
    pathTriplet(x=c(.1, .1, .4, .4, .6, .9, .9, .6),
                y=c(.1, .4, .4, .1, .6, .6, .9, .9),
                title="Disjoint rectangles")
    popViewport()
    pushViewport(viewport(layout.pos.row=4))
    pathTriplet(x=c(.1, .1, .6, .6, .4, .4, .9, .9),
                y=c(.1, .6, .6, .1, .4, .9, .9, .4),
                title="Overlapping rectangles, both clockwise")
    popViewport()
    pushViewport(viewport(layout.pos.row=5))
    pathTriplet(x=c(.1, .1, .6, .6, .4, .9, .9, .4),
                y=c(.1, .6, .6, .1, .4, .4, .9, .9),
                title="Overlapping rectangles, one clockwise, other anti-clockwise")
    popViewport()
    popViewport()
}

pathTest()

[Package grid version 2.12.2 Index]