Learn R Programming

lattice (version 0.9-13)

cloud: 3d Scatter Plot

Description

Draws 3d scatter plots and surfaces.

Usage

cloud(formula,
      data,
      aspect = c(1, 1),
      scales = list(distance = rep(1, 3), arrows = TRUE),
      zlab,
      zlim, 
      distance = 0.2,
      par.box,
      perspective = TRUE,
      R.mat = diag(4), 
      screen = list(z = 40, x = -60),
      zoom = .9,
      ...)
wireframe(formula, data,
          at = pretty(z, cuts),
          col.regions,
          drape = FALSE,
          shade = FALSE,
          pretty = FALSE,
          colorkey = any(drape),
          cuts = 70,
          distance = 0.2,
          par.box,
          screen = list(z = 40, x = -60),
          zoom,
          scales),
          ...)

Arguments

formula
a formula of the form z ~ x * y | g1 * g2 * ..., where z is a numeric response, and x, y are numeric values. g1,g2,..., if present, are conditioning variables used for conditioning, and must
data
data frame in which variables are evaluated
aspect
vector of length 2, giving the relative aspects of the y-size/x-size and z-size/x-size of the enclosing rectangle.
scales
describes scales. Can contain lists named x, y and z. Arrows are drawn if arrows=TRUE, otherwise tick marks with labels are drawn. Both can be suppressed by draw=FALSE. Several other components that work in the usual
zlab
z label
zlim
z limits
distance
numeric, between 0 and 1, controls amount of perspective. See details below
par.box
graphical parameters for box, namely, col, lty and lwd. By default obtained from the parameter box.3d
perspective
logical, whether to plot a perspective view. Setting this to FALSE is equivalent to setting distance=0
R.mat
initial rotation matrix in homogeneous coordinates. (Untested)
screen
A list determining the sequence of rotations to be applied to the data before being plotted. The initial position starts with the viewing point along the positive z-axis, and the x and y axes in the usual position. Each component of the list s
zoom
factor by which to scale the picture. Useful to get the variable names into the plot
drape
logical, whether the wireframe is to be draped in color
shade
logical, whether the wireframe is to be illuminated from a light source. See panel.3dwire for details
at, col.regions
these arguments are analogous to those in levelplot. if drape=TRUE, at gives the vector of values where the colors change, and col.regions the vector of
cuts
the default number of cutpoints if drape=TRUE
pretty
whether the cutpoints should be pretty
colorkey
whether a color key should be drawn alongside. See levelplot for details
...
other arguments, passed to the panel function

Value

  • An object of class ``trellis''. The `update' method can be used to update components of the object and the `print' method (usually called by default) will plot it on an appropriate plotting device.

synopsis

cloud(formula, data = parent.frame(), allow.multiple = is.null(groups) || outer, outer = FALSE, auto.key = FALSE, aspect = c(1,1), panel = "panel.cloud", prepanel = NULL, scales = NULL, strip = TRUE, groups = NULL, xlab, xlim = if (is.factor(x)) levels(x) else range(x, na.rm = TRUE), ylab, ylim = if (is.factor(y)) levels(y) else range(y, na.rm = TRUE), zlab, zlim = if (is.factor(z)) levels(z) else range(z, na.rm = TRUE), distance = .2, perspective = TRUE, R.mat = diag(4), screen = list(z = 40, x = -60), zoom = .8, at, pretty = FALSE, drape = FALSE, drop.unused.levels, ..., colorkey = any(drape), col.regions, cuts = 70, subset = TRUE, axs.default = "r") wireframe(formula, data = parent.frame(), panel = "panel.wireframe", prepanel = NULL, strip = TRUE, groups = NULL, cuts = 70, pretty = FALSE, drape = FALSE, ..., col.regions = trellis.par.get("regions")$col, colorkey = any(drape), subset = TRUE)

Details

These functions produce three dimensional plots in each panel. The orientation is obtained as follows: the data are scaled to fall within a bounding box that is contained in the [-0.5, 0.5] cube (even smaller for non-default values of aspect). The viewing direction is given by a sequence of rotations specified by the screen argument, starting from the positive Z-axis. The viewing point (camera) is located at a distance of 1/distance from the origin. If perspective=FALSE, distance is set to 0 (i.e., the viewing point is at an infinite distance).

cloud draws a 3-D Scatter Plot, while wireframe draws a 3-D surface (usually evaluated on a grid). Multiple surfaces can be drawn by wireframe using the groups argument (although this is of limited use because the display is messed up when the surfaces intersect). Specifying groups with cloud results in a panel.superpose-like effect (via panel.3dscatter).

wireframe can optionally render the surface as being illuminated by a light source (no shadows though). Details can be found in the help page for panel.3dwire. Note that although arguments controlling these are actually arguments for the panel function, they can be supplied to cloud and wireframe directly.

For single panel plots, wireframe can also plot parametrized 3-D surfaces (i.e., functions of the form f(u,v) = (x(u,v), y(u,v), z(u,v)), where values of (u,v) lie on a rectangle. The simplest example of this sort of surface is a sphere parametrized by latitude and longitude. This can be achieved by calling wireframe with a formula of the form z~x*y, where x, y and z are all matrices of the same dimension, representing the values of x(u,v), y(u,v) and z(u,v) evaluated on a discrete rectangular grid (the actual values of (u,v) are unimportant).

When this feature is used, the heights used to calculate drape colors or shading colors are no longer the z values, but the distances of (x,y,z) from the origin.

Note that this feature does not work with groups, subscripts, subset, etc. Conditioning variables are also not supported in this case.

The algorithm for identifying which edges of the bounding box are `behind' the points doesn't work in some extreme situations. Also, panel.cloud tries to figure out the optimal location of the arrows and axis labels automatically, but can fail on occasion (especially when the view is from ``below'' the data). This can be manually controlled by the scpos argument in panel.cloud.

These and all other high level Trellis functions have several other arguments in common. These are extensively documented only in the help page for xyplot, which should be consulted to learn more detailed usage.

See Also

xyplot, levelplot, panel.cloud, Lattice

Examples

Run this code
data(volcano)  ## 87 x 61 matrix
wireframe(volcano, shade = TRUE,
          aspect = c(61/87, 0.4),
          light.source = c(10,0,10))

g <- expand.grid(x = 1:10, y = 5:15, gr = 1:2)
g$z <- log((g$x^g$g + g$y^2) * g$gr)
wireframe(z ~ x * y, data = g, groups = gr,
          scales = list(arrows = FALSE),
          drape = TRUE,
          screen = list(z = 30, x = -60))

data(iris)
cloud(Sepal.Length ~ Petal.Length * Petal.Width | Species, data = iris,
      screen = list(x = -90, y = 70), distance = .4, zoom = .6)

par.set <- list(axis.line = list(col = "transparent"), clip = list(panel = FALSE))
print(cloud(Sepal.Length ~ Petal.Length * Petal.Width, 
            data = iris, cex = .8, 
            groups = Species, 
            subpanel = panel.superpose,
            main = "Stereo",
            screen = list(z = 20, x = -70, y = 3),
            par.settings = par.set),
      split = c(1,1,2,1), more = TRUE)
print(cloud(Sepal.Length ~ Petal.Length * Petal.Width,
            data = iris, cex = .8, 
            groups = Species,
            subpanel = panel.superpose,
            main = "Stereo",
            screen = list(z = 20, x = -70, y = 0),
            par.settings = par.set),
      split = c(2,1,2,1))

Run the code above in your browser using DataLab