我正在尝试向 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)
最佳答案
有一个 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")
关于r - 在 RGL 中将立方体绘制到 3D 散点图中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18162354/