Проблема раскраски трехмерной диаграммы рассеяния с помощью «plot3D»

Dec 05 2020

Я пытаюсь создать трехмерный график рассеяния с помощью plot3Dpackage. К сожалению, у меня возникли проблемы с назначением цвета каждой точке.

Например, когда я пытаюсь нарисовать 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 точки - в красный цвет соответственно. Я совершенно не понимаю, почему это происходит.

Буду очень признателен, если вы любезно дадите мне знать, как решить эту проблему. Заранее большое спасибо!

Ответы

1 Ben Dec 06 2020 at 00:14

Причина, по которой вы видите 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.