r - 在 RGL 中将立方体绘制到 3D 散点图中

标签 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)

最佳答案

有一个 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

关于r - 在 RGL 中将立方体绘制到 3D 散点图中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18162354/

相关文章:

r - 简化 R 中的 while 循环

c++ - 计算线段与trimesh交点的代码

java - Jogl 2.2.1 Windows 工作教程?

r - 如何删除/更改 R 中绘图 geom_vline 中的标签?

r - 如何告诉 lapply 忽略错误并处理列表中的下一个内容?

r - 如何仅替换R中列的每一行中 ":"之前的部分

r - 在顶层 : 'README.Rmd' persists even after implementing suggested solutions 发现非标准文件/目录

delphi - 在Delphi的TImage控件上绘制Sphere

r - 为什么 geom_line 中间的 NA 并不总是断线?

在 Maxima 中绘制 ODE 的解 ("expression evalues to non-numeric value everywhere")