5 votos

Trazar varios raster en el mismo gráfico, uno encima de otro, utilizando un ángulo determinado en R

Deseo crear un gráfico con múltiples capas raster en R, pero trazarlas en un ángulo determinado para que todas las capas puedan verse correctamente. Lo que tengo en mente es un gráfico como el siguiente, tomado de aquí: https://pubs.usgs.gov/ds/691/ds691.pdf enter image description here

¿Cómo puedo hacer esto en R?

5voto

sgwill Puntos 2444

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.

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X