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 ``nearby'' points to be identified. To exit from point-identification mode,
  click the right (or centre) button an empty region of the plot.scatter3d(x, y, z, 
        xlab=deparse(substitute(x)), ylab=deparse(substitute(y)),
        axis.scales=TRUE,                          
        zlab=deparse(substitute(z)), 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"),
        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, threshold=0.01, speed=1, fov=60,
        fit="linear", groups=NULL, parallel=TRUE, ellipsoid=FALSE, level=0.5,
        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)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."white", "black".axis.scales is FALSE, then
    the second colour is used for all three axes.fit."exp2", "linear", 
    "exp", "none".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.TRUE or FALSE).TRUE or FALSE).TRUE or FALSE).NULL (the default), the gam function will select the degrees of freedom
    for a smoothing spline by generalized NULL (the default), the gam function will select degrees of freedom 
    for the smoothing splines by generalized cross-validation; if a positiv"linear", "quadratic", "smooth", 
    "additive"; to display fitted surface(s); partial matching is supported -- 
    e.g., c("lin", "quad").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 
    plane.col are used successively for the points, sgroups, should the surfaces be constrained to be
    parallel? A logical value, with default TRUE.TRUE or FALSE).TRUE or FALSE). scatter3d rescales the three variables 
    internally to fit in the unit cube; this rescaling will affect regression 
    coefficients.plane.col argument to scatter3dscatter3d not return a useful value; it is used for its side-effect of
  creating a 3D scatterplot. indentify3d returns the labels of the
  identified points.rgl.open, gamState.x77 <- as.data.frame(state.x77)
with(State.x77, scatter3d(Income, Murder, Illiteracy))
with(State.x77, identify3d(Income, Murder, Illiteracy, labels=row.names(State.x77)))
with(State.x77,  scatter3d(Income, Murder, Illiteracy, fit=c("linear", "quadratic")))Run the code above in your browser using DataLab