He aquí un ejemplo simplista y crudo utilizando quadmesh
. Tienes que poner la 3ª coordenada a una constante - de lo contrario aparecerá como relieve - aquí hecho después de usar eso como los datos. El material$col
son los valores cuádruples de los datos, con una escala bruta de los valores en una paleta separada para cada uno sólo para ilustrar.
library(quadmesh)
library(rgl)
## stack up volcano
library(raster)
r <- raster(volcano)
## make the qm in three forms
qm2 <- qm3 <- qm1 <- quadmesh(r)
## update the colours based on the data, then update the vertices
scl <- function(x) (x - min(x, na.rm = TRUE))/diff(range(x, na.rm = TRUE))
qm1$material$col <- viridis::inferno(26)[scl(qm1$vb[3, qm1$ib]) * 25 + 1]
qm1$vb[3, ] <- 1
qm2$material$col <- viridis::viridis(26)[scl(qm2$vb[3, qm2$ib]) * 25 + 1]
qm2$vb[3, ] <- 2
qm3$material$col <- rev(viridis::magma(26))[scl(qm3$vb[3, qm3$ib]) * 25 + 1]
qm3$vb[3, ] <- 3
## adding to a plot is the default
shade3d(qm1)
shade3d(qm2)
shade3d(qm3)
aspect3d(1, 1, 1)
Para poner las líneas hay que utilizar lines3d
y hacer un bucle sobre cada anillo (lo más fácil es utilizar ggplot2 fortify y visitar por group
), o descomponerlos todos en segmentos y trazarlos con segments3d
. Tengo código de ayuda para hacerlo pero no está en CRAN.