在一个大盒子内可视化许多3D小盒子

3

我需要对一个包含许多内部3D盒子的3D盒子进行交互式可视化。

我的第一种粗略想法如下。在2D中,我可以使用

x<-matrix(runif(25),nrow=5,ncol=5);
image(x)

为了使矩阵看起来像一个包含许多小矩形的大矩形,需要对每个单元格进行着色。

如果要将这个过程转换成3D,假设一个大小为10x10x10的大盒子。实际上,我想选择盒子中每个1000个元素的颜色。我知道可以使用rgl制作交互式3D图,但我不理解如何给3D数组中的每个单元格着色。

如果您有更好的解决方案,我很乐意听取建议。

1个回答

4

如果我理解正确,我相信这应该可以工作:

library(rgl)
grd <- expand.grid(x=seq(0,10,2), y=seq(0,10,2), z=seq(0,10,2))
grd$dist <- sqrt(grd$x^2 + grd$y^2 + grd$z^2) # distance to coordinate 0,0,0
grd$col <- rainbow(ceiling(max(grd$dist+1)))[ceiling(grd$dist+1)]
grd$alpha <- rep(c(0.2, 1), each=nrow(grd)/2)
open3d()
for(i in seq(nrow(grd))){
  shade3d( translate3d( cube3d(col = grd$col[i]), grd$x[i], grd$y[i], grd$z[i]) , alpha=grd$alpha[i])
}
rgl.snapshot("cube.png")

enter image description here

这个例子是针对一个6x6x6的魔方,颜色基于它们中心到原点的欧几里得距离。希望这能为你展示一种自定义颜色的方法。

非常感谢,这看起来非常不错!在测试代码时,我脑海中浮现了一些问题。是否可以为各个小立方体单独设置alpha值?我需要这样做来突出显示例如大立方体中间的强烈红色方块(=使alpha值大),并使其他方块几乎不可见(=alpha值低)。此外,是否可以给大立方体的边缘着色? - jorkku
是的,我已经用另一个向量更新了示例以实现透明度。 - Marc in the box
谢谢,我接受了您的答案,因为它包含了我需要的一切。 - jorkku
1
有人知道如何给轴添加标签(而不是给每个小框都添加轴标签)吗? - leb112358

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接