2

我正在尝试将较小的立方体/网格(具有指定边长)添加到 3D 散点图中。我希望立方体定位在原点。我该怎么做呢?我玩过 cube3d() 但我似乎无法正确定位立方体也无法使其成为网格(所以我可以看到它包含的数据点。这就是我所拥有的:

library(rgl)
x <- runif(100)
y <- runif(100)
z <- runif(100)
plot3d(x,y,z, type="p", col="red", xlab="x", ylab="y", zlab="z", site=5, lwd=15)
4

2 回答 2

2

有一个cube3d函数默认返回一个列表对象(但不绘制它),它代表一个跨越 x:[-1,1] 的立方体;y:[-1,1]; z:[-1,1]。如果您在侧面应用颜色,默认情况下它将是纯色的。您需要使用 'alpha" 使两侧透明(请参阅 参考资料?rgl.materials)。因此,如果我们从您使用的绘图开始:

library(rgl)
x <- runif(100)
y <- runif(100)
z <- runif(100)
plot3d(x,y,z, type="p", col="red", xlab="x", ylab="y", zlab="z", site=5, lwd=15)
c3d <- cube3d(color="red", alpha=0.1)  # nothing happens yet
c3d   # Look at structure
shade3d(c3d)   # render the object

这会将绘图扩展到上述透明红色立方体的默认尺寸。顶点位于 $vb 元素前三行的 xyz 位置:

c3b$vb
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]   -1    1   -1    1   -1    1   -1    1
[2,]   -1   -1    1    1   -1   -1    1    1
[3,]   -1   -1   -1   -1    1    1    1    1
[4,]    1    1    1    1    1    1    1    1

现在要制作另一个在原点有一个顶点的立方体,我能想到的最快方法是将所有 -1 设置为 0:

 c3d.origin <- cube3d(color="red", alpha=0.1)
 c3d.origin$vb [c3d.origin$vb == -1] <- 0
 shade3d(c3d.origin)
 rgl.snapshot("cubes3d.png")

在此处输入图像描述

于 2013-08-10T15:18:28.083 回答
0

这是我为各种目的而准备的东西。它应该让你开始。

box <- data.frame(
    x = c(1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1),
    y = c(1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1),
    z = c(1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1))
segments3d(box$x, box$y, box$z, line_antialias = TRUE, col = "blue")
points3d(0,0,0, col = "red", size = 5, point_antialias = TRUE)
于 2013-08-10T14:02:03.553 回答