将立方体绘制到RGL中的3D散点图中

时间:2013-08-10 13:28:04

标签: r 3d plot cube rgl

我正在尝试将一个较小的立方体/网格(具有指定的边长)添加到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)

2 个答案:

答案 0 :(得分: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")

enter image description here

答案 1 :(得分: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)