¿Cómo visualizar una función de densidad tridimensional?

19

¿Cuál es la mejor forma gráfica de visualizar una función de densidad tridimensional? Como en me gustaría visualizar ?

z=FX,Y(X,y)

No es necesario, pero el Rcódigo para esto sería genial.


fuente
3
Lo cambié para que sea más estadístico.
1
Si hay algo que falta en esas opciones, será más útil si puede especificar qué es y cuáles son exactamente sus necesidades para que podamos encontrar un tipo de visualización que mejor se adapte a ellas.
gung - Restablecer Monica
1
Esos son adecuados, pero ¿cuáles son mis otras opciones /
3
@nico, no creo que esto hubiera estado fuera de tema / más adecuado para SO incluso antes de los cambios. La solicitud de código se especificó como opcional y data-visualizationforma parte de nuestro mandato.
gung - Restablecer Monica
1
@whuber, la pregunta original era simplemente "visualizar un conjunto de datos 3D" (puede verlo en el historial de edición). Supongo que eso es sobre el tema, aunque su punto, tal como se hizo, es claramente correcto.
gung - Restablece a Monica

Respuestas:

25

Bueno, hay cuatro enfoques posibles que me vienen a la mente (aunque estoy seguro de que hay muchos más), pero básicamente puedes trazar los datos como un diagrama de perspectiva, un diagrama de contorno, un mapa de calor o si prefieres una dispersión tridimensional plot (que es más o menos una gráfica de perspectiva cuando tiene valores de para todos los pares ( x , y ) . Aquí hay algunos ejemplos de cada uno (de un conjunto de datos tridimensional conocido ):z(X,y)R

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Aquí hay dos parcelas adicionales que tienen características de trazado más bonitas que las dadas anteriormente. ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí Entonces, según su preferencia, determinará de qué manera desea visualizar los conjuntos de datos en 3D.

Here is the `R` code used to generate these four mentioned plots.
library(fields)
library(scatterplot3d)

#Data for illistarition
x = seq(-10, 10, length= 100)
y = x
f = function(x, y) { r = sqrt(x^2+y^2); 10 * sin(r)/r }
z = outer(x, y, f)
z[is.na(z)] = 1

#Method 1
#Perspective Plot
persp(x,y,z,col="lightblue",main="Perspective Plot")

#Method 2
#Contour Plot
contour(x,y,z,main="Contour Plot")
filled.contour(x,y,z,color=terrain.colors,main="Contour Plot",)

#Method 3
#Heatmap
image(x,y,z,main="Heat Map")
image.plot(x,y,z,main="Heat Map")

#Method 4
#3-D Scatter Plot
X = expand.grid(x,y)
x = X[,1]
y = X[,2]
z = c(z)
scatterplot3d(x,y,z,color="lightblue",pch=21,main="3-D Scatter Plot")

fuente
Ese mapa de calor es cegador.
gung - Restablecer Monica
@Gung, (o alguien realmente) ¿sabe si hay que agregar una barra lateral que indique a qué valores corresponden los colores del mapa de calor? Por supuesto, eso es usar el comando de imagen.
3
Creo que desea que el image.plot()comando agregue una barra de color. Además, filled.contour()genera un gráfico similar con una barra de color agregada de forma predeterminada.
Macro
55
Mamá siempre me dijo que no mirara a los ojos del sol , @GavinSimpson.
gung - Restablecer Monica
2
Mientras estamos aquí, solo señalaré que puede personalizar la paleta de colores de la forma que desee ... La forma más fácil (pero probablemente no la mejor) de hacerlo es usar colorRampPalette(), por ejemplo, si escribe a = colorRampPalette(c('dark blue','blue','light blue','yellow','orange', 'red','dark red')), crea una función aeso genera una aproximación discreta de un continuo de color que pasa a través de esos colores. El argumento de aes un número entero que determina la resolución de esta aproximación discreta.
Macro