# scatter3d

From car v2.0-20
by John Fox

##### Three-Dimensional Scatterplots and Point Identification

The `scatter3d`

function uses the `rgl`

package to draw 3D scatterplots
with various regression surfaces. The function `identify3d`

allows you to label points interactively with the mouse:
Press the right mouse button (on a two-button mouse) or the centre button (on a
three-button mouse), drag a
rectangle around the points to be identified, and release the button.
Repeat this procedure for each point or
set of

- Keywords
- hplot

##### Usage

```
scatter3d(x, ...)
## S3 method for class 'formula':
scatter3d(formula, data, subset, radius, xlab, ylab, zlab, labels, ...)
## S3 method for class 'default':
scatter3d(x, y, z,
xlab=deparse(substitute(x)), ylab=deparse(substitute(y)),
zlab=deparse(substitute(z)), axis.scales=TRUE, revolutions=0,
bg.col=c("white", "black"),
axis.col=if (bg.col == "white") c("darkmagenta", "black", "darkcyan")
else c("darkmagenta", "white", "darkcyan"),
surface.col=c("blue", "green", "orange", "magenta", "cyan", "red",
"yellow", "gray"), surface.alpha=0.5,
neg.res.col="red", pos.res.col="green",
square.col=if (bg.col == "white") "black" else "gray", point.col="yellow",
text.col=axis.col, grid.col=if (bg.col == "white") "black" else "gray",
fogtype=c("exp2", "linear", "exp", "none"),
residuals=(length(fit) == 1), surface=TRUE, fill=TRUE, grid=TRUE,
grid.lines=26, df.smooth=NULL, df.additive=NULL,
sphere.size=1, radius=1, threshold=0.01, speed=1, fov=60,
fit="linear", groups=NULL, parallel=TRUE,
ellipsoid=FALSE, level=0.5, ellipsoid.alpha=0.1,
id.method=c("mahal", "xz", "y", "xyz", "identify", "none"),
id.n=if (id.method == "identify") Inf else 0,
labels=as.character(seq(along=x)), offset = ((100/length(x))^(1/3)) * 0.02,
model.summary=FALSE, ...)
identify3d(x, y, z, axis.scales=TRUE, groups = NULL, labels = 1:length(x),
col = c("blue", "green", "orange", "magenta", "cyan", "red", "yellow", "gray"),
offset = ((100/length(x))^(1/3)) * 0.02)
```

##### Arguments

- formula
- ``model'' formula, of the form
`y ~ x + z`

or (to plot by groups)`y ~ x + z | g`

, where`g`

evaluates to a factor or other variable dividing the data into groups. - data
- data frame within which to evaluate the formula.
- subset
- expression defining a subset of observations.
- x
- variable for horizontal axis.
- y
- variable for vertical axis (response).
- z
- variable for out-of-screen axis.
- xlab, ylab, zlab
- axis labels.
- axis.scales
- if
`TRUE`

, label the values of the ends of the axes.*Note:*For`identify3d`

to work properly, the value of this argument must be the same as in`scatter3d`

. - revolutions
- number of full revolutions of the display.
- bg.col
- background colour; one of
`"white"`

,`"black"`

. - axis.col
- colours for axes; if
`axis.scales`

is`FALSE`

, then the second colour is used for all three axes. - surface.col
- vector of colours for regression planes,
used in the order specified by
`fit`

; for multi-group plots, the colours are used for the regression surfaces and points in the several groups. - surface.alpha
- transparency of regression surfaces, from
`0.0`

(fully transparent) to`1.0`

(opaque); default is`0.5`

. - neg.res.col, pos.res.col
- colours for lines representing negative and positive residuals.
- square.col
- colour to use to plot squared residuals.
- point.col
- colour of points.
- text.col
- colour of axis labels.
- grid.col
- colour of grid lines on the regression surface(s).
- fogtype
- type of fog effect; one of
`"exp2"`

,`"linear"`

,`"exp"`

,`"none".`

- residuals
- plot residuals if
`TRUE`

; if`residuals="squares"`

, then the squared residuals are shown as squares (using code adapted from Richard Heiberger). Residuals are available only when there is one surface plotted. - surface
- plot surface(s) (
`TRUE`

or`FALSE`

). - fill
- fill the plotted surface(s) with colour (
`TRUE`

or`FALSE`

). - grid
- plot grid lines on the regression surface(s) (
`TRUE`

or`FALSE`

). - grid.lines
- number of lines (default, 26) forming the grid, in each of the x and z directions.
- df.smooth
- degrees of freedom for the two-dimensional smooth regression surface;
if
`NULL`

(the default), the`gam`

function will select the degrees of freedom for a smoothing spline by generalized - df.additive
- degrees of freedom for each explanatory variable in an additive regression;
if
`NULL`

(the default), the`gam`

function will select degrees of freedom for the smoothing splines by generalized cross-validation; if a positiv - sphere.size
- general size of spheres representing points; the actual size is dependent on the number of observations.
- radius
- relative radii of the spheres representing the points. This is normally a vector of the
same length as the variables giving the coordinates of the points, and for the
`formula`

method, that must be the case or the argument may be omit - threshold
- if the actual size of the spheres is less than the threshold, points are plotted instead.
- speed
- relative speed of revolution of the plot.
- fov
- field of view (in degrees); controls degree of perspective.
- fit
- one or more of
`"linear"`

,`"quadratic"`

,`"smooth"`

,`"additive"`

; to display fitted surface(s); partial matching is supported -- e.g.,`c("lin", "quad")`

. - groups
- if
`NULL`

(the default), no groups are defined; if a factor, a different surface or set of surfaces is plotted for each level of the factor; in this event, the colours in`surface.col`

are used successively for the points, - parallel
- when plotting surfaces by
`groups`

, should the surfaces be constrained to be parallel? A logical value, with default`TRUE`

. - ellipsoid
- plot concentration ellipsoid(s) (
`TRUE`

or`FALSE`

). - level
- expected proportion of bivariate-normal observations included in the concentration ellipsoid(s); default is 0.5.
- ellipsoid.alpha
- transparency of ellipsoids, from
`0.0`

(fully transparent) to`1.0`

(opaque); default is`0.1`

. - id.method
- if
`"mahal"`

(the default), relatively extreme points are identified automatically according to their Mahalanobis distances from the centroid (point of means); if`"identify"`

, points are identified interactively by right-cli - id.n
- Number of relatively extreme points to identify automatically (default,
`0`

unless`id.method="identify"`

). - model.summary
- print summary or summaries of the model(s) fit
(
`TRUE`

or`FALSE`

).`scatter3d`

rescales the three variables internally to fit in the unit cube; this rescaling will affect regression coefficients. - labels
- text labels for the points, one for each point; in the
`default`

method defaults to the observation indices, in the`formula`

method to the row names of the data. - col
- colours for the point labels, given by group. There must be at
least as many colours as groups; if there are no groups, the first colour is used. Normally, the colours
would correspond to the
`surface.col`

argument to`scatter3d<`

- offset
- vertical displacement for point labels (to avoid overplotting the points).
- ...
- arguments to be passed down.

##### Value

`scatter3d`

does not return a useful value; it is used for its side-effect of creating a 3D scatterplot.`identify3d`

returns the labels of the identified points.

##### Note

You have to install the `rgl`

package to produce 3D plots.

##### References

Fox, J. and Weisberg, S. (2011)
*An R Companion to Applied Regression*, Second Edition, Sage.

##### See Also

##### Examples

```
if(interactive() && require(rgl) && require(mgcv)){
scatter3d(prestige ~ income + education, data=Duncan)
Sys.sleep(5) # wait 5 seconds
scatter3d(prestige ~ income + education | type, data=Duncan)
Sys.sleep(5)
scatter3d(prestige ~ income + education | type, surface=FALSE,
ellipsoid=TRUE, revolutions=3, data=Duncan)
scatter3d(prestige ~ income + education, fit=c("linear", "additive"),
data=Prestige)
Sys.sleep(5)
scatter3d(prestige ~ income + education | type,
radius=(1 + women)^(1/3), data=Prestige)
}
# drag right mouse button to identify points, click right button in open area to exit
scatter3d(prestige ~ income + education, data=Duncan, id.method="identify")
scatter3d(prestige ~ income + education | type, data=Duncan, id.method="identify")
```

*Documentation reproduced from package car, version 2.0-20, License: GPL (>= 2)*

### Community examples

Looks like there are no examples yet.