Crear un gráfico de superficie 3D a partir de coordenadas(x, y, z)
-
la función
interp()
del paqueteakima
en R -
la Función
persp3d()
del Paquetergl
en 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
z
correspondientes a una grilla de valoresx-y
usandointerp()
. -
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.