R: Polygon Drawing

polygon {base} | R Documentation

## Polygon Drawing

### Description

`polygon` draws the polygons whose vertices are given in `x` and `y`.

### Usage

    polygon(x, y = NULL, density = NULL, angle = 45,
            border = NULL, col = NA, lty = NULL, xpd = NULL, ...)

### Arguments

`x,y` | vectors containing the coordinates of the vertices of the polygon.
`density` | the density of shading lines, in lines per inch. The default value of `NULL` means that no shading lines are drawn. Non-positive values of `density` also inhibit the drawing of shading lines.
`angle` | the slope of shading lines, given as an angle in degrees (counter-clockwise).
`col` | the color for filling the polygon. The default, `NA`, is to leave polygons unfilled.
`border` | the color to draw the border. The default, `NULL`, uses `par("fg")`. Use `border=0` to omit borders.
`lty` | the line type to be used, as in `par`.
`xpd` | (where) should clipping take place? Defaults to `par("xpd")`.
`...` | graphical parameters can be given as arguments to `polygon`.

### Details

The coordinates can be passed in a plotting structure (a list with `x` and `y` components), a two-column matrix, .... See `xy.coords`.

It is assumed that the polygon is closed by joining the last point to the first point.

The coordinates can contain missing values. The behaviour is similar to that of `lines`, except that instead of breaking a line into several lines, `NA` values break the polygon into several complete polygons (including closing the last point to the first point). See the examples below.

When multiple polygons are produced, the values of `density`, `angle`, `col`, `border`, and `lty` are recycled in the usual manner.

### Bugs

The present shading algorithm can produce incorrect results for self-intesecting polygons.

### Author(s)

The code implementing polygon shading was donated by Kevin Buhr buhr@stat.wisc.edu.

### See Also

`segments` for even more flexibility, `lines`, `rect`, `box`, `abline`.

### Examples

    x <- c(1:9,8:1)
    y <- c(1,2*(5:3),2,-1,17,9,8,2:9)
    op <- par(mfcol=c(3,1))
    for(xpd in c(FALSE,TRUE,NA)) {
      plot(1:10, main=paste("xpd =", xpd)) ; box("figure", col = "pink", lwd=3)
      polygon(x,y, xpd=xpd, col = "orange", lty=2, lwd=2, border = "red")
    }
    par(op)

    n <- 100
    xx <- c(0:n, n:0)
    yy <- c(c(0,cumsum(rnorm(n))), rev(c(0,cumsum(rnorm(n)))))
    plot   (xx, yy, type="n", xlab="Time", ylab="Distance")
    polygon(xx, yy, col="gray", border = "red")
    title("Distance Between Brownian Motions")

    # Multiple polygons from NA values
    # and recycling of col, border, and lty
    op <- par(mfrow=c(2,1))
    plot(c(1,9), 1:2, type="n")
    polygon(1:9, c(2,1,2,1,1,2,1,2,1),
            col=c("red", "blue"),
            border=c("green", "yellow"),
            lwd=3, lty=c("dashed", "solid"))
    plot(c(1,9), 1:2, type="n")
    polygon(1:9, c(2,1,2,1,NA,2,1,2,1),
            col=c("red", "blue"),
            border=c("green", "yellow"),
            lwd=3, lty=c("dashed", "solid"))
    par(op)

    # Line-shaded polygons
    plot(c(1,9), 1:2, type="n")
    polygon(1:9, c(2,1,2,1,NA,2,1,2,1),
            density=c(10, 20), angle=c(-45, 45))

[Package Contents]