Crear un gráfico de superficie 3D a partir de coordenadas(x, y, z)
-
la función
interp()del paqueteakimaen R -
la Función
persp3d()del Paqueterglen R - Demostración de las funciones
Base R y varios paquetes proporcionan funciones para trazar una superficie tridimensional sobre el plano horizontal. La mayoría de ellos necesitan un valor z para cada combinación de valores x e y como entrada.
En otras palabras, necesitan una cuadrícula x-y y valores z para cada punto de la cuadrícula.
Cuando tenemos un dataframe o matriz de valores (x,y,z) (coordenadas), podemos trazar los puntos, pero no la superficie.
Necesitamos estimar los valores z para todas las combinaciones de valores x e y utilizando los datos proporcionados y una función de interpolación adecuada para trazar la superficie.
Este artículo mostrará cómo usar el paquete akima para estimar los valores z para una cuadrícula de valores x-y. Luego trazaremos la superficie usando el paquete rgl.
la función interp() del paquete akima en R
El paquete akima proporciona funciones para la interpolación de datos bivariados.
La función interp() toma los tres vectores x, y y z y devuelve una cuadrícula de 40 por 40 de valores x-y con un valor z correspondiente.
Por defecto, se produce una interpolación lineal.
la Función persp3d() del Paquete rgl en R
El paquete rgl crea gráficos interactivos en 3D. Podemos hacer zoom y rotar la trama usando el mouse.
Usaremos la función persp3d() para trazar la superficie y la función points3d() para trazar los datos originales.
Para ver los gráficos en R necesitamos establecer una opción particular: options(rgl.printRglwidget = TRUE).
Demostración de las funciones
Seguiremos los siguientes pasos.
-
Instale los paquetes necesarios si aún no están disponibles.
-
Cargue los paquetes necesarios.
-
Cree el dataframe de muestra.
-
Crea la lista de valores
zcorrespondientes a una grilla de valoresx-yusandointerp(). -
Traza la superficie usando
persp3d(). -
Añade los puntos usando
points3d().
Código de ejemplo:
# INSTALL AND LOAD THE PACKAGES.
# Uncomment and run the concerned line to install the package.
#install.packages("akima")
library(akima)
#install.packages("rgl")
library(rgl)
# CREATE THE SAMPLE DATA.
set.seed(1)
x=rnorm(50)
set.seed(2)
y=rnorm(50)
z=c(rep(5,5),rep(-10,5), rep(3,15), rep(20,5), seq(5,15, length.out=10), rep(0,5), rep(3,5))
XYZ=data.frame(x,y,z)
# INTERPOLATE THE Z VALUES.
a_mat=interp(XYZ$x, XYZ$y, XYZ$z)
# PLOT THE SURFACE AND THE POINTS.
options(rgl.printRglwidget = TRUE)
persp3d(a_mat$x, a_mat$y, a_mat$z, col="yellow")
points3d(x,y,z, col="red")
Gráfico de salida:
rgl produce un gráfico 3D interactivo.

