The deldir() function in the deldir package computes a Delaunay triangulation of a set of points. These functions display it as a surface.

# S3 method for deldir
plot3d(x, ...)
# S3 method for deldir
persp3d(x, ..., add = FALSE)
# S3 method for deldir
as.mesh3d(x, col = "gray", coords = c("x", "y", "z"), 
    smooth = TRUE, normals = NULL, texcoords = NULL, ...)



A "deldir" object, produced by the deldir() function. It must contain z values.


Whether to add surface to existing plot (add = TRUE) or create a new plot (add = FALSE, the default).


Colors to apply to each vertex in the triangulation. Will be recycled as needed.


See Details below.


Whether to average normals at vertices for a smooth appearance.


User-specified normals at each vertex. Requires smooth = FALSE.


Texture coordinates at each vertex.


See Details below.


These functions construct a mesh3d object corresponding to the triangulation in x. The plot3d and persp3d methods plot it.

The coords parameter allows surfaces to be plotted over any coordinate plane. It should be a permutation of the column names c("x", "y", "z") from the "deldir" object. The first will be used as the x coordinate, the second as the y coordinate, and the third as the z coordinate.

The ... parameters in plot3d.deldir are passed to persp3d.deldir; in persp3d.deldir they are passed to both as.mesh3d.deldir and persp3d.mesh3d; in as.mesh3d.deldir they are used as material parameters in a tmesh3d call.


x <- rnorm(200, sd = 5)
y <- rnorm(200, sd = 5)
r <- sqrt(x^2 + y^2)
z <- 10 * sin(r)/r
col <- cm.colors(20)[1 + round(19*(z - min(z))/diff(range(z)))]

save <- options(rgl.meshColorWarning = FALSE)

# This code is awkward:  to work with demo(rglExamples),
# we need auto-printing of the plots.  This means we
# have to repeat the test for deldir.

haveDeldir <- requireNamespace("deldir", quietly = TRUE)
if (haveDeldir) {
  dxyz <- deldir::deldir(x, y, z = z, suppressMsge = TRUE)
  persp3d(dxyz, col = col)
if (haveDeldir) { open3d() # Do it without smoothing and with a different orientation. persp3d(dxyz, col = col, coords = c("z", "x", "y"), smooth = FALSE) }