2

plot3D我正在尝试使用包创建一个 3D 散点图。不幸的是,我在为每个点分配颜色时遇到了麻烦。

例如,当我尝试在绘图上绘制 8 个点时,我想分别将“黑色”分配给前 4 个点,将“红色”分配给最后 4 个点,我编写了以下脚本(在这个脚本中,我使用了 8 个样本从样本数据集中iris并尝试将Sepal.LengthPetal.LengthSepal.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 个点被涂成红色。我完全不知道为什么会发生这种情况。

如果您能告诉我如何解决这个问题,我将不胜感激。非常感谢您!

4

1 回答 1

1

您看到 6 个黑色和 2 个红色的原因colvar是您的调用中缺少scatter3D用于col着色的内容。

在您的示例中,颜色基于您的 z 轴。为了演示,我们可以添加回colkey,添加ticktype以查看轴信息,并旋转一点以显示红色适用于sep.w(z 轴)超过 3.45 的值,其中仅包括数据中的 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"
          )

缺少 colvar 的 plot1

现在,如果您想根据 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 的 plot2

您可以考虑使用另一个向量来colvar为您的点着色;只要确保它与您的 x、y 和 z 数据的长度相同。

于 2020-12-05T17:14:13.217 回答