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)),
    zlab=deparse(substitute(z)),
    revolutions=0, bg.col=c("white", "black"), 
    axis.col=if (bg.col == "white") "black" else "white",
    surface.col=c("blue", "green", "orange", "magenta", 
        "cyan", "red", "yellow", "gray"),
    neg.res.col="red", pos.res.col="green", 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, 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, model.summary=FALSE)
    
identify3d(x, y, z, groups=NULL, labels=1:length(x), 
    col=c("blue", "green", "orange", "magenta", "cyan", "red", "yellow", "gray"),
    offset = ((100/length(x))^(1/3)) * 0.02)"white", "black"."white" for black background, 
    "black" for white background.fit."exp2", "linear", 
    "exp", "none".TRUE or FALSE); available only 
    when there is one surface plotted.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).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