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