R: Polygon Drawing

polygon {graphics} | 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 = par("lty"),
            ..., fillOddEven = FALSE)

### 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. A zero value of `density` means no shading nor filling whereas negative values and `NA` suppress shading (and so allow color filling).
`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, unless `density` is specified. (For back-compatibility, `NULL` is equivalent to `NA`.) If `density` is specified with a positive value this gives the color of the shading lines.
`border` | the color to draw the border. The default, `NULL`, means to use `par("fg")`. Use `border = NA` to omit borders. For compatibility with S, `border` can also be logical, in which case `FALSE` is equivalent to `NA` (borders omitted) and `TRUE` is equivalent to `NULL` (use the foreground colour),
`lty` | the line type to be used, as in `par`.
`...` | graphical parameters such as `xpd`, `lend`, `ljoin` and `lmitre` can be given as arguments.
`fillOddEven` | logical controlling the polygon shading mode: see below for details. Default `FALSE`.

### 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 to be 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.

Shading of polygons is only implemented for linear plots: if either axis is on log scale then shading is omitted, with a warning.

### Bugs

Self-intersecting polygons may be filled using either the “odd-even” or “non-zero” rule. These fill a region if the polygon border encircles it an odd or non-zero number of times, respectively. Shading lines are handled internally by R according to the `fillOddEven` argument, but device-based solid fills depend on the graphics device. The `windows`, `pdf` and `postscript` devices have their own `fillOddEven` argument to control this.

### Author(s)

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

### References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

Murrell, P. (2005) R Graphics. Chapman & Hall/CRC Press.

### See Also

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

`par` for how to specify colors.

### 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(stats::rnorm(n))), rev(c(0, cumsum(stats::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 graphics version 4.0.5 Index]