Plotting tracer distributions in 3D
Description
tracers3D
plots 3D tracer distributions in traditional graphics.
The topography can be defined when calling this function or created before
calling this function.
tracers3Drgl
plots 3D tracer distributions in openGL graphics.
A suitable topography has to be created before calling this function.
It does not create a movie.
moviepoints3D
creates a movie of tracer distributions
in openGL graphics.
It is based on the plot3Drgl
function points3Drgl.
Usage
1 2 3 4 5 6 7 8 9 10 11 12  tracers3D (x, y, z, colvar = NULL, ...,
col = NULL, NAcol = "white", breaks = NULL,
colkey = FALSE, clim = NULL, clab = NULL, surf = NULL)
tracers3Drgl (x, y, z, colvar = NULL, ...,
col = NULL, NAcol = "white", breaks = NULL,
colkey = FALSE, clim = NULL, clab = NULL)
moviepoints3D (x, y, z, colvar, t, by = 1,
col = jet.col(100), NAcol = "white", breaks = NULL,
clim = NULL, wait = NULL, ask = FALSE, add = FALSE,
basename = NULL, ...)

Arguments
x, y, z 
Vectors with (x, y, z) positions of tracers. Should be of equal length. 
colvar 
The variable used for coloring. It need
not be present, but if specified, it should be a vector of
dimension equal to 
t 
Vectors with time points of tracers.
Should be of length equal to length of 
by 
Number increment of the time sequence. 
col 
Colors to be used for coloring each individual point (if colvar not
specified) or that define the colors as specified by 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. 
colkey 
A logical, The default is to draw the color key on side = 4, i.e. in the right margin.
If 
clim 
Only if 
clab 
Only if 
surf 
If not 
add 
Logical. If 
ask 
Logical. If 
wait 
The time interval inbetween drawing of a set of new points, in seconds.
If 
basename 
The base name of a 
... 
additional arguments passed to scatter3D from package

Value
returns nothing
Author(s)
Karline Soetaert <karline.soetaert@nioz.nl>
See Also
tracers2D for plotting time series of tracer distributions in 2D
movieslice3D for plotting slices in 3D
Ltrans for 3D output of a particle tracking model
Examples
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119  # save plotting parameters
pm < par("mfrow")
## =======================================================================
## Create topography, data
## =======================================================================
# The topographic surface
x < seq(pi, pi, by = 0.2)
y < seq(0, pi, by = 0.1)
M < mesh(x, y)
z < with(M, sin(x)*sin(y))
# Initial condition
xi < c(0.25 * rnorm(100)  pi/2, 0.25 * rnorm(100)  pi/4)
yi < 0.25 * rnorm(200) + pi/2
zi < 0.005*rnorm(200) + 0.5
# the species
species < c(rep(1, 100), rep(2, 100))
# set initial conditions
xp < xi; yp < yi; zp < zi
## =======================================================================
## Traditional graphics
## =======================================================================
par(mfrow = c(2, 2))
# Topography is defined by argument surf
for (i in 1:4) {
# update tracer distribution
xp < xp + 0.25 * rnorm(200)
yp < yp + 0.025 * rnorm(200)
zp < zp + 0.25 *rnorm(200)
# plot new tracer distribution
tracers3D(xp, yp, zp, colvar = species, pch = ".", cex = 5,
main = paste("timestep ", i), col = c("orange", "blue"),
surf = list(x, y, z = z, theta = 0, facets = FALSE),
colkey = list(side = 1, length = 0.5, labels = c("sp1","sp2"),
at = c(1.25, 1.75), dist = 0.075))
}
# same, but creating topography first
## Not run:
# create the topography on which to add points
persp3D(x, y, z = z, theta = 0, facets = FALSE, plot = FALSE)
for (i in 1:4) {
# update tracer distribution
xp < xp + 0.25 * rnorm(200)
yp < yp + 0.025 * rnorm(200)
zp < zp + 0.25 *rnorm(200)
# plot new tracer distribution
tracers3D(xp, yp, zp, colvar = species, pch = ".", cex = 5,
main = paste("timestep ", i), col = c("orange", "blue"),
colkey = list(side = 1, length = 0.5, labels = c("sp1","sp2"),
at = c(1.25, 1.75), dist = 0.075))
}
## End(Not run)
## =======================================================================
## rgl graphics
## =======================================================================
# pause < 0.05
# create a suitable topography
persp3D(x, y, z = z, theta = 0, facets = NA, plot = FALSE)
plotrgl( )
xp < xi; yp < yi; zp < zi
nstep < 10
for (i in 1:nstep) {
xp < xp + 0.05 * rnorm(200) + 0.05
yp < yp + 0.0025 * (rnorm(200) + 0.0025)
zp < zp + 0.05 *rnorm(200)
# tracers3Drgl(xp, yp, zp, col = c(rep("orange", 100), rep("blue", 100)),
# main = paste("timestep ", i))
# or:
tracers3Drgl(xp, yp, zp, colvar = species, col = c("orange", "blue"),
main = paste("timestep ", i))
# Sys.sleep(pause)
# or: readline("hit enter for next")
}
# using function moviepoints3D
## Not run:
# first create the data in matrices
xp < matrix(nrow = 200, ncol = nstep, data = xi)
yp < matrix(nrow = 200, ncol = nstep, data = yi)
zp < matrix(nrow = 200, ncol = nstep, data = zi)
tp < matrix(nrow = 200, ncol = nstep, data = 0)
cv < matrix(nrow = 200, ncol = nstep, data = species)
nstep < 10
for (i in 2:nstep) {
xp[,i] < xp[,i1] + 0.05 * rnorm(200) + 0.05
yp[,i] < yp[,i1] + 0.0025 * (rnorm(200) + 0.0025)
zp[,i] < zp[,i1] + 0.05 *rnorm(200)
tp[,i] < i
}
# create the topography
persp3Drgl(x, y, z = z, theta = 0, lighting = TRUE, smooth = TRUE)
# add moviepoints:
moviepoints3D (xp, yp, zp, colvar = cv, t = tp,
wait = 0.05, cex = 10, col = c("red", "orange"))
## End(Not run)
# reset plotting parameters
par(mfrow = pm)
