Comment visualiser une fonction de densité 3D?

19

Quelle est la meilleure façon de visualiser graphiquement une fonction de densité 3D? Comme dans je voudrais visualiser ?

z=fX,Y(x,y)

Pas nécessaire, mais le Rcode serait génial.


la source
3
Je l'ai changé pour être plus statistique.
1
S'il y a quelque chose qui manque dans ces options, il sera très utile si vous pouvez spécifier de quoi il s'agit et quels sont exactement vos besoins afin que nous puissions trouver une sorte de visualisation qui pourrait mieux leur convenir.
gung - Rétablir Monica
1
Ce sont bien sûr, mais quelles sont mes autres options /
3
@nico, je ne pense pas que cela aurait été hors sujet / mieux adapté à SO avant même les changements. La demande de code a été spécifiée comme facultative, et data-visualizationfait partie de notre mandat.
gung - Rétablir Monica
1
@whuber, la question d'origine était simplement de "visualiser un jeu de données 3D" (vous pouvez le voir dans l'historique des modifications). Je considère que c'est un sujet, bien que votre argument, tel qu'il a été formulé, soit clairement correct.
gung - Réintégrer Monica

Réponses:

25

Eh bien, il y a quatre approches possibles qui me viennent à l'esprit (bien que je sois sûr qu'il y en ait beaucoup d'autres) mais, fondamentalement, vous pouvez soit tracer les données sous forme de tracé en perspective, de tracé de contour, de carte thermique ou si vous préférez une dispersion 3D plot (qui est plus ou moins un plot en perspective lorsque vous avez des valeurs de pour toutes les paires . Voici quelques exemples de chacune (à partir d'un ensemble de données 3D bien connu dans )):( x , y )z(x,y)R

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

Voici deux tracés supplémentaires qui ont des caractéristiques de tracé plus agréables que celles données précédemment. entrez la description de l'image ici entrez la description de l'image ici Ainsi, selon vos préférences, vous dicterez de quelle manière vous souhaitez visualiser les ensembles de données 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")

la source
Cette carte thermique est aveuglante.
gung - Rétablir Monica
@Gung, (ou n'importe qui vraiment) savez-vous s'il y a eu un ajout d'une barre latérale qui indique à quelles valeurs correspondent les couleurs de la carte thermique? C'est bien sûr en utilisant la commande image.
3
Je pense que vous voulez que la image.plot()commande ajoute une barre de couleur. Génère également filled.contour()un tracé similaire avec une barre de couleur ajoutée par défaut.
Macro
5
Maman m'a toujours dit de ne pas regarder dans les yeux du soleil , @GavinSimpson.
gung - Rétablir Monica
2
Alors que nous sommes ici, je vais simplement signaler que vous pouvez personnaliser la palette de couleurs comme vous voulez ... Le plus simple (mais probablement pas la meilleure) façon de le faire est d' utiliser colorRampPalette(), par exemple , si vous tapez a = colorRampPalette(c('dark blue','blue','light blue','yellow','orange', 'red','dark red'))il crée une fonction aqui génère une approximation discrète d'un continuum de couleurs qui passe à travers ces couleurs. L'argument de aest un entier qui détermine la résolution de cette approximation discrète.
Macro