3-D surfaces {plot3D} | R Documentation |
Functions for plotting 3 dimensional shapes
Description
surf3D
plots a surface in 3-D with a color variable.
spheresurf3D
plots a colored image on a sphere.
Usage
surf3D (x, y, z, ..., colvar = z, phi = 40, theta = 40,
col = NULL, NAcol = "white", breaks = NULL,
border = NA, facets = TRUE, colkey = NULL,
panel.first = NULL, clim = NULL, clab = NULL, bty = "n",
lighting = FALSE, shade = NA, ltheta = -135, lphi = 0,
inttype = 1, add = FALSE, plot = TRUE)
spheresurf3D (colvar = matrix(nrow = 50, ncol = 50, data = 1:50, byrow = TRUE),
..., phi = 0, theta = 0,
col = NULL, NAcol = "white", breaks = NULL,
border = NA, facets = TRUE, contour = FALSE,
colkey = NULL, resfac = 1,
panel.first = NULL, clim = NULL, clab = NULL, bty = "n",
lighting = FALSE, shade = NA, ltheta = -135, lphi = 0,
inttype = 1, full = FALSE, add = FALSE, plot = TRUE)
Arguments
x , y , z |
Matrices with x, y and z-values that define the surfaces to
be colored. They should be of the same dimension
as |
colvar |
The variable used for coloring. If a matrix, it should be of the same
dimension as |
theta , phi |
the angles defining the viewing direction.
|
col |
Color palette to be used for coloring the |
NAcol |
Colors to be used for |
breaks |
a set of finite numeric breakpoints for the colors; must have one more breakpoint than color and be in increasing order. Unsorted vectors will be sorted, with a warning. |
border |
The color of the lines drawn around the surface facets.
The default, |
facets |
If |
contour |
If |
colkey |
A logical, The default is to draw the color key on side = 4, i.e. in the right margin.
If |
resfac |
Resolution factor, one value or a vector of two numbers, for
the x and y- values respectively. A value > 1 will increase the
resolution. For instance, if |
panel.first |
A |
clab |
Only if |
clim |
Only if |
bty |
The type of the box, the default is to draw no box.
Set |
lighting |
If not Will overrule See examples in jet.col. |
shade |
the degree of shading of the surface facets. Values of shade close to one yield shading similar to a point light source model and values close to zero produce no shading. Values in the range 0.5 to 0.75 provide an approximation to daylight illumination. See persp. |
ltheta , lphi |
if finite values are specified for |
inttype |
The interpolation type to create the polygons, either
taking the mean of the |
full |
Logical. If |
add |
Logical. If |
plot |
Logical. If |
... |
Additional arguments passed to the plotting methods.
The following persp arguments can be specified:
In addition, the perspbox arguments
|
Details
Function spheresurf3D
is a projection on a sphere with radius 1.
This means that the x- y- and z- axes range from [-1, 1].
Value
Returns the viewing transformation matrix, See trans3D.
Author(s)
Karline Soetaert <karline.soetaert@nioz.nl>
See Also
persp for the function on which this implementation is based.
jet.col, plotdev for other examples of surf3D
.
plotdev for zooming, rescaling, rotating a plot.
Examples
# save plotting parameters
pm <- par("mfrow")
pmar <- par("mar")
par(mar = c(1, 1, 1, 1))
## =======================================================================
## A three-dimensional shape
## (ala http://docs.enthought.com/mayavi/mayavi/mlab.html)
## =======================================================================
par(mfrow = c(2, 2))
# create grid matrices
X <- seq(0, pi, length.out = 50)
Y <- seq(0, 2*pi, length.out = 50)
M <- mesh(X, Y)
phi <- M$x
theta <- M$y
# x, y and z grids
r <- sin(4*phi)^3 + cos(2*phi)^3 + sin(6*theta)^2 + cos(6*theta)^4
x <- r * sin(phi) * cos(theta)
y <- r * cos(phi)
z <- r * sin(phi) * sin(theta)
# full colored image
surf3D(x, y, z, colvar = y, colkey = FALSE, shade = 0.5,
box = FALSE, theta = 60)
# same, but just facets
surf3D(x, y, z, colvar = y, colkey = FALSE, box = FALSE,
theta = 60, facets = FALSE)
# with colors and border, AND increasing the size
# (by reducing the x- y and z- ranges
surf3D(x, y, z, colvar = y, colkey = FALSE, box = FALSE,
theta = 60, border = "black", xlim = range(x)*0.8,
ylim = range(y)*0.8, zlim = range(z)*0.8)
# Now with one color and shading
surf3D(x, y, z, box = FALSE,
theta = 60, col = "lightblue", shade = 0.9)
## Not run: # rotation
for (angle in seq(0, 360, by = 10))
plotdev(theta = angle)
## End(Not run)
## =======================================================================
## Several other shapes
## http://xahlee.info/surface/gallery.html
## =======================================================================
par(mfrow = c(2, 2))
# Shape 1
M <- mesh(seq(0, 6*pi, length.out = 50),
seq(pi/3, pi, length.out = 50))
u <- M$x ; v <- M$y
x <- u/2 * sin(v) * cos(u)
y <- u/2 * sin(v) * sin(u)
z <- u/2 * cos(v)
surf3D(x, y, z, colvar = z, colkey = FALSE, box = FALSE, phi = 50)
# Shape 2: add border
M <- mesh(seq(0, 2*pi, length.out = 50),
seq(0, 2*pi, length.out = 50))
u <- M$x ; v <- M$y
x <- sin(u)
y <- sin(v)
z <- sin(u + v)
surf3D(x, y, z, colvar = z, border = "black",
colkey = FALSE)
# shape 3: uses same mesh, other perspective (d >1)
x <- (3 + cos(v/2)*sin(u) - sin(v/2)*sin(2*u))*cos(v)
y <- (3 + cos(v/2)*sin(u) - sin(v/2)*sin(2*u))*sin(v)
z <- sin(v/2)*sin(u) + cos(v/2)*sin(2*u)
surf3D(x, y, z, colvar = z, colkey = FALSE, d = 2, facets = FALSE)
# shape 4: more complex colvar
M <- mesh(seq(-13.2, 13.2, length.out = 50),
seq(-37.4, 37.4, length.out = 50))
u <- M$x ; v <- M$y
b <- 0.4; r <- 1 - b^2; w <- sqrt(r)
D <- b*((w*cosh(b*u))^2 + (b*sin(w*v))^2)
x <- -u + (2*r*cosh(b*u)*sinh(b*u)) / D
y <- (2*w*cosh(b*u)*(-(w*cos(v)*cos(w*v)) - sin(v)*sin(w*v))) / D
z <- (2*w*cosh(b*u)*(-(w*sin(v)*cos(w*v)) + cos(v)*sin(w*v))) / D
surf3D(x, y, z, colvar = sqrt(x + 8.3), colkey = FALSE,
theta = 10, border = "black", box = FALSE)
box()
## =======================================================================
## A sphere, with box type with grid lines
## =======================================================================
par(mar = c(2, 2, 2, 2))
par(mfrow = c(1, 1))
M <- mesh(seq(0, 2*pi, length.out = 50),
seq(0, pi, length.out = 50))
u <- M$x ; v <- M$y
x <- cos(u)*sin(v)
y <- sin(u)*sin(v)
z <- cos(v)
colvar <- sin(u*6) * sin(v*6)
surf3D(y, x, z, colvar = colvar, phi = 0, bty = "b2",
lighting = TRUE, ltheta = 40)
## =======================================================================
## Function spheresurf3D
## =======================================================================
par(mfrow = c(2, 2))
spheresurf3D()
# true ranges are [-1, 1]; set limits to [-0.8, 0.8] to make larger plots
lim <- c(-0.8, 0.8)
spheresurf3D(colkey = FALSE, xlim = lim, ylim = lim, zlim = lim)
spheresurf3D(bty = "b", ticktype = "detailed", phi = 50)
spheresurf3D(colvar = matrix(nrow = 30, ncol = 30, data = runif(900)))
## =======================================================================
## Images on a sphere
## =======================================================================
par(mfrow = c(1, 1), mar = c(1, 1, 1, 3))
AA <- Hypsometry$z; AA[AA<=0] <- NA
lim <- c(-0.8, 0.8)
# log transformation of color variable
spheresurf3D(AA, NAcol = "black", theta = 90, phi = 30, box = FALSE,
xlim = lim, ylim = lim, zlim = lim, log = "c")
# restore plotting parameters
par(mfrow = pm)
par(mar = pmar)