Como visualizar uma função de densidade 3D?

19

Qual é a melhor maneira de visualizar graficamente uma função de densidade 3D? Como em gostaria de visualizar ?

z=fX,Y(x,y)

Não é necessário, mas o Rcódigo para isso seria ótimo.


fonte
3
Eu mudei para ser mais estatístico.
1
Se houver algo faltando nessas opções, será mais útil especificar o que é e quais são exatamente as suas necessidades, para que possamos encontrar um tipo de visualização que melhor se adapte a elas.
gung - Restabelece Monica
1
Aqueles são adequados certo, mas quais são as minhas outras opções /
3
@nico, eu não acho que isso teria sido fora do tópico / mais adequado para SO, mesmo antes das mudanças. A solicitação de código foi especificada como opcional e data-visualizationfaz parte do nosso mandato.
gung - Restabelece Monica
1
@whuber, a pergunta original era apenas "visualizar um conjunto de dados 3D" (você pode vê-lo no histórico de edições). Entendo que isso seja um tópico, embora o seu ponto de vista seja claramente correto.
gung - Restabelece Monica

Respostas:

25

Bem, existem quatro abordagens possíveis que me vêm à mente (embora eu tenha certeza de que existem muito mais), mas basicamente você pode plotar os dados como um gráfico em perspectiva, um gráfico de contorno, um mapa de calor ou, se preferir, uma dispersão 3D plot (que é mais ou menos um plot de perspectiva quando você tem valores de para todos os pares . Aqui estão alguns exemplos de cada um (de um conjunto de dados 3D bem conhecido em ):z(x,y)R

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

Aqui estão dois gráficos adicionais com recursos de plotagem mais agradáveis ​​do que os dados anteriormente. insira a descrição da imagem aqui insira a descrição da imagem aqui Portanto, dependendo da sua preferência, ditará como você deseja visualizar os conjuntos de dados 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")

fonte
Esse mapa de calor é ofuscante.
gung - Restabelece Monica
@Gung, (ou alguém realmente), você sabe se existe uma para adicionar uma barra lateral que informa a que valores correspondem as cores do mapa de calor? Isso é claro, usando o comando image.
3
Eu acho que você deseja que o image.plot()comando adicione uma barra de cores. Além disso, filled.contour()gera um gráfico semelhante com uma barra de cores adicionada por padrão.
Macro
5
Mamãe sempre me dizia para não olhar nos olhos do sol , @GavinSimpson.
gung - Restabelece Monica
2
Enquanto estivermos aqui, apenas mostrarei que você pode personalizar a paleta de cores da maneira que desejar ... A maneira mais fácil (mas provavelmente não a melhor) de fazer isso é usando colorRampPalette(), por exemplo, se você digitar, a = colorRampPalette(c('dark blue','blue','light blue','yellow','orange', 'red','dark red'))ela cria uma função aque gera uma aproximação discreta de um continuum de cores que passa por essas cores. O argumento to aé um número inteiro que determina a resolução dessa aproximação discreta.
Macro