R:4D曲线,x,y,z,具有x,y,z不同长度的颜色

时间:2018-05-17 18:19:47

标签: r plot 4d

我有一个矩阵30 * 16 * 9,我希望通过R中的4-D图来显示它。 我在包plot3d和scatterplot3d中尝试过scatter3D。

      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必须长度相等?这太不方便了

2 个答案:

答案 0 :(得分:2)

这是因为每个点必须有三个值才能生成此图。 x有30个值,y有16个值,z有9个值。使用此数据,只有前9个点具有x-y-z值。在您的问题的评论中,eipi10给出了非常好的解释。例如,另一种方法是插入数据以创建缺失值。 More about data interpolation

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)

希望它有所帮助!

答案 1 :(得分:2)

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

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 plot