2

我有一个 30 x 16 x 9 矩阵,我想通过 R 中的 4-D 图来可视化它。我scatter3D()在包plot3dscatterplot3d.

      x <- seq(10, 300, 10)
      y <- seq(5.0, 20.0, 1.0)
      z <- c(seq(0.5, 4, 0.5), 10)
      scatter3D(x, y, z, colvar = data)

它总是给出错误,说y应该具有相同的长度x。我该如何处理?为什么x, y,z必须等长?这太不方便了。

4

2 回答 2

3

发生这种情况是因为该图的每个点都必须具有三个值。x 有 30 个值,y 有 16 个值,z 有 9 个值。有了这个数据,只有前 9 个点会有 xyz 值。在您的问题的评论中,eipi10 对此给出了很好的解释。例如,另一种方法是对数据进行插值以创建缺失值。更多关于数据插值

library("plot3D")
number_of_points <- 50
xx <- seq(10, 300, 10)
yy <- seq(5.0, 20.0, 1.0)
zz <- c(seq(0.5, 4, 0.5), 10)

xx <- approx(x = xx, method="linear", n=number_of_points, ties = mean)$y
yy <- approx(x = yy, method="linear", n=number_of_points, ties = mean)$y
zz <- approx(x = zz, method="linear", n=number_of_points, ties = mean)$y

scatter3D(xx, yy, zz)

希望能帮助到你!

于 2018-05-17T18:33:37.310 回答
2

你说你有一个矩阵,但你有的是三个向量。您首先需要创建“矩阵”(这里我们将创建一个名为dfusing的 data.frame expand.grid):

x <- seq(10, 300, 10)
y <- seq(5.0, 20.0, 1.0)
z <- c(seq(0.5, 4, 0.5), 10)

df <- expand.grid(x = x, y = y, z = z)

然后我们可以使用任何一种方法使用包中的scatter3d函数进行绘图car

car::scatter3d(x ~ y + z, data = df)
car::scatter3d(df$x, df$y, df$z)

3d 绘图

于 2018-05-17T18:37:24.447 回答