Problema de colorear un diagrama de dispersión 3D usando "plot3D"
Estoy tratando de crear un diagrama de dispersión 3D usando plot3D
package. Desafortunadamente, tengo problemas para asignar color a cada punto.
Por ejemplo, cuando trato de dibujar 8 puntos en la trama y quiero asignar "negro" a los primeros 4 puntos y "rojo" a los últimos 4 puntos respectivamente, he escrito el siguiente guión (en este guión, empleé 8 ejemplos de la muestra de datos iris
y intentado asignar Sepal.Length
, Petal.Length
, Sepal.Width
para X, y, eje Z, respectivamente);
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)))
En este caso, curiosamente, 6 puntos fueron de color negro y 2 puntos fueron de color rojo, respectivamente. Estoy completamente perdido por qué sucede esto.
Le agradecería mucho si tuviera la amabilidad de dejarme saber cómo resolver este problema. ¡Muchas gracias por adelantado!
Respuestas
La razón por la que ves 6 negros y 2 rojos es que colvar
faltan en tu scatter3D
llamada para usarlos col
en colorear.
En su ejemplo, el color se basa en su eje z. Para demostrarlo, podemos volver a agregar colkey
, agregar ticktype
para ver la información del eje y rotar un poco para mostrar que el color rojo se aplica para valores superiores a 3.45 pulgadas sep.w
(eje z), que solo incluye 2 valores de sus datos (3.6 y 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"
)

Ahora, si desea asignar colores según el índice / número de los 8 puntos, puede agregar colvar
y asignar, por ejemplo, los primeros 4 valores como 1 para el negro y los segundos 4 valores como 2 para el rojo:
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)))

Puede considerar otro vector colvar
que tendría sentido para colorear sus puntos; solo asegúrese de que tenga la misma longitud que sus datos x, y y z.