Проблема раскраски трехмерной диаграммы рассеяния с помощью «plot3D»
Я пытаюсь создать трехмерный график рассеяния с помощью plot3D
package. К сожалению, у меня возникли проблемы с назначением цвета каждой точке.
Например, когда я пытаюсь нарисовать 8 точек на графике и хочу присвоить «черный» первым 4 точкам и «красный» последним 4 точкам соответственно, я написал следующий сценарий (в этом сценарии я использовал 8 образцов из образца набора данных iris
и попытался правопреемник Sepal.Length
, Petal.Length
, Sepal.Width
чтобы X, Y, Z ось, соответственно);
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)))
В этом случае, как ни странно, 6 точек были окрашены в черный цвет, а 2 точки - в красный цвет соответственно. Я совершенно не понимаю, почему это происходит.
Буду очень признателен, если вы любезно дадите мне знать, как решить эту проблему. Заранее большое спасибо!
Ответы
Причина, по которой вы видите 6 черных и 2 красных, заключается в том, что они colvar
отсутствуют в вашем scatter3D
вызове для использования col
в раскраске.
В вашем примере цвет основан на вашей оси Z. Чтобы продемонстрировать, мы можем добавить обратно colkey
, добавить, ticktype
чтобы увидеть информацию об оси, и немного повернуть, чтобы показать, что красный цвет применяется для значений более 3,45 дюйма sep.w
(ось z), что включает только 2 значения из ваших данных (3,6 и 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"
)

Теперь, если вы хотите назначить цвета на основе индекса / количества 8 точек, вы можете добавить colvar
и присвоить, например, первым 4 значениям 1 для черного и вторым 4 значениям 2 для красного:
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)))

Вы можете рассмотреть другой вектор, colvar
который будет иметь смысл для раскраски ваших точек; просто убедитесь, что это та же длина, что и ваши данные x, y и z.