Problème de coloration du nuage de points 3D avec "plot3D"
J'essaie de créer un nuage de points 3D en utilisant un plot3D
package. Malheureusement, j'ai du mal à attribuer une couleur à chaque point.
Par exemple, lorsque j'essaie de dessiner 8 points sur l'intrigue et que je veux attribuer respectivement «noir» aux 4 premiers points et «rouge» aux 4 derniers points, j'ai écrit le script suivant (dans ce script, j'ai utilisé 8 exemples à partir de l'ensemble de données échantillon iris
et essayé d'assigner Sepal.Length
, Petal.Length
, Sepal.Width
X, Y, axe Z, respectivement);
data(iris)
sep.l <- iris[1:8,]$Sepal.Length pet.l <- iris[1:8,]$Petal.Length
sep.w <- iris[1:8,]$Sepal.Width
library(plot3D)
scatter3D(x=sep.l, y=pet.l, z=sep.w,
pch =19,
bty = "b2",
colkey= FALSE,
col=c(rep("black", 4), rep("red", 4)))
Dans ce cas, curieusement, 6 points étaient respectivement de couleur noire et 2 points de couleur rouge. Je ne sais pas pourquoi cela se produit.
J'apprécierais beaucoup si vous me fassiez savoir comment résoudre ce problème. Merci beaucoup d'avance!
Réponses
La raison pour laquelle vous voyez 6 noirs et 2 rouges, c'est qu'il colvar
manque à votre scatter3D
appel pour être utilisé avec la col
coloration.
Dans votre exemple, la couleur est basée sur votre axe z. Pour démontrer, nous pouvons rajouter colkey
, ajouter ticktype
pour voir les informations d'axe et faire pivoter un peu pour montrer que la couleur rouge est appliquée pour les valeurs supérieures à 3,45 pouces sep.w
(axe z), qui ne comprend que 2 valeurs de vos données (3,6 et 3,9) .
data(iris)
sep.l <- iris[1:8,]$Sepal.Length pet.l <- iris[1:8,]$Petal.Length
sep.w <- iris[1:8,]$Sepal.Width
library(plot3D)
scatter3D(x = sep.l, y = pet.l, z = sep.w,
pch = 19,
bty = "b2",
colkey = TRUE,
phi = 15,
theta = 30,
col=c(rep("black", 4), rep("red", 4)),
ticktype = "detailed"
)

Maintenant, si vous souhaitez attribuer des couleurs en fonction de l'index / numéro des 8 points, vous pouvez ajouter colvar
et attribuer, par exemple, les 4 premières valeurs comme 1 pour le noir et les 4 secondes comme 2 pour le rouge:
scatter3D(x = sep.l, y = pet.l, z = sep.w,
pch = 19,
bty = "b2",
colkey = FALSE,
phi = 15,
theta = 30,
col=c(rep("black", 4), rep("red", 4)),
ticktype = "detailed",
colvar = c(rep(1, 4), rep(2, 4)))

Vous pouvez envisager un autre vecteur car colvar
cela aurait du sens pour colorer vos points; assurez-vous simplement qu'elle est de la même longueur que vos données x, y et z.