web-dev-qa-db-fra.com

Comment tracer un diagramme de dispersion 3D à l'aide de ggplot?

J'ai essayé d'utiliser la fonction "complotement" mais cela ne fonctionne pas du tout dans mon cas. "ggplot" fonctionne dans le cas de la 2D mais il donne une erreur lors de l'ajout d'un axe supplémentaire. Comment résoudre ce problème?

ggplot(data,aes(x=D1,y=D2,z=D3,color=Sample))+geom_point()

Comment ajouter un axe de plus et obtenir le tracé 3D dans ce domaine? Je vous remercie.

14
M Arjun

Puisque vous avez tagué votre question avec plotly et dit que vous avez essayé de l'utiliser avec parcimonie, je pense qu'il serait utile de vous donner une solution de code de travail dans plotly:

Création de données à tracer avec:

set.seed(417)
library(plotly)
temp <- rnorm(100, mean=30, sd=5)
pressure <- rnorm(100)
dtime <- 1:100

Représentation graphique de votre nuage de points 3D à l'aide de scatter3d type:

plot_ly(x=temp, y=pressure, z=dtime, type="scatter3d", mode="markers", color=temp)

Rend les éléments suivants: enter image description here

ggplot comme d'autres l'ont remarqué, ne prend pas en charge le rendu graphique 3D.

22
onlyphantom

Une solution possible est gg3D .

gg3D est un package créé pour étendre ggplot2 pour produire des tracés 3D. Il fait exactement ce que vous demandez: il ajoute un troisième axe à un ggplot. Je le trouve assez bon et facile à utiliser et c'est ce que j'utilise pour mes besoins limités.

Un exemple tiré de la vignette pour produire une intrigue de base

devtools::install_github("AckerDWM/gg3D")

library("gg3D")

## An empty plot with 3 axes
qplot(x=0, y=0, z=0, geom="blank") + 
  theme_void() +
  axes_3D()

Empty 3D axes

## Axes can be populated with points using the function stat_3D.

data(iris)
ggplot(iris, aes(x=Petal.Width, y=Sepal.Width, z=Petal.Length, color=Species)) + 
  theme_void() +
  axes_3D() +
  stat_3D()

iris data

Il existe d'autres options n'impliquant pas ggplot. Par exemple, l'excellent package plot3D avec son extension plot3Drgl pour tracer en openGL.

11
Marco Stamazza