Learn R Programming

graphics (version 3.4.3)

sunflowerplot: Produce a Sunflower Scatter Plot

Description

Multiple points are plotted as ‘sunflowers’ with multiple leaves (‘petals’) such that overplotting is visualized instead of accidental and invisible.

Usage

sunflowerplot(x, …)

# S3 method for default sunflowerplot(x, y = NULL, number, log = "", digits = 6, xlab = NULL, ylab = NULL, xlim = NULL, ylim = NULL, add = FALSE, rotate = FALSE, pch = 16, cex = 0.8, cex.fact = 1.5, col = par("col"), bg = NA, size = 1/8, seg.col = 2, seg.lwd = 1.5, …)

# S3 method for formula sunflowerplot(formula, data = NULL, xlab = NULL, ylab = NULL, …, subset, na.action = NULL)

Arguments

x

numeric vector of x-coordinates of length n, say, or another valid plotting structure, as for plot.default, see also xy.coords.

y

numeric vector of y-coordinates of length n.

number

integer vector of length n. number[i] = number of replicates for (x[i], y[i]), may be 0. Default (missing(number)): compute the exact multiplicity of the points x[], y[], via xyTable().

log

character indicating log coordinate scale, see plot.default.

digits

when number is computed (i.e., not specified), x and y are rounded to digits significant digits before multiplicities are computed.

xlab, ylab

character label for x-, or y-axis, respectively.

xlim, ylim

numeric(2) limiting the extents of the x-, or y-axis.

add

logical; should the plot be added on a previous one ? Default is FALSE.

rotate

logical; if TRUE, randomly rotate the sunflowers (preventing artefacts).

pch

plotting character to be used for points (number[i]==1) and center of sunflowers.

cex

numeric; character size expansion of center points (s. pch).

cex.fact

numeric shrinking factor to be used for the center points when there are flower leaves, i.e., cex / cex.fact is used for these.

col, bg

colors for the plot symbols, passed to plot.default.

size

of sunflower leaves in inches, 1[in] := 2.54[cm]. Default: 1/8\", approximately 3.2mm.

seg.col

color to be used for the segments which make the sunflowers leaves, see par(col=); col = "gold" reminds of real sunflowers.

seg.lwd

numeric; the line width for the leaves' segments.

further arguments to plot [if add = FALSE], or to be passed to or from another method.

formula

a formula, such as y ~ x.

data

a data.frame (or list) from which the variables in formula should be taken.

subset

an optional vector specifying a subset of observations to be used in the fitting process.

na.action

a function which indicates what should happen when the data contain NAs. The default is to ignore case with missing values.

Value

A list with three components of same length,

x

x coordinates

y

y coordinates

number

number

Use xyTable() (from package grDevices) if you are only interested in this return value.

Side Effects

A scatter plot is drawn with ‘sunflowers’ as symbols.

Details

This is a generic function with default and formula methods.

For number[i] == 1, a (slightly enlarged) usual plotting symbol (pch) is drawn. For number[i] > 1, a small plotting symbol is drawn and number[i] equi-angular ‘rays’ emanate from it.

If rotate = TRUE and number[i] >= 2, a random direction is chosen (instead of the y-axis) for the first ray. The goal is to jitter the orientations of the sunflowers in order to prevent artefactual visual impressions.

References

Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983) Graphical Methods for Data Analysis. Wadsworth.

Schilling, M. F. and Watkins, A. E. (1994) A suggestion for sunflower plots. The American Statistician, 48, 303--305.

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

See Also

density, xyTable

Examples

Run this code
# NOT RUN {
require(stats) # for rnorm
require(grDevices)

## 'number' is computed automatically:
sunflowerplot(iris[, 3:4])
## Imitating Chambers et al, p.109, closely:
sunflowerplot(iris[, 3:4], cex = .2, cex.fact = 1, size = .035, seg.lwd = .8)
## or
sunflowerplot(Petal.Width ~ Petal.Length, data = iris,
              cex = .2, cex.fact = 1, size = .035, seg.lwd = .8)


sunflowerplot(x = sort(2*round(rnorm(100))), y = round(rnorm(100), 0),
              main = "Sunflower Plot of Rounded N(0,1)")
## Similarly using a "xyTable" argument:
xyT <- xyTable(x = sort(2*round(rnorm(100))), y = round(rnorm(100), 0),
               digits = 3)
utils::str(xyT, vec.len = 20)
sunflowerplot(xyT, main = "2nd Sunflower Plot of Rounded N(0,1)")

## A 'marked point process' {explicit 'number' argument}:
sunflowerplot(rnorm(100), rnorm(100), number = rpois(n = 100, lambda = 2),
              main = "Sunflower plot (marked point process)",
              rotate = TRUE, col = "blue4")
# }

Run the code above in your browser using DataLab