2016-02-03 9 views
1

我需要以某種方式使3D盒子的交互式可視化在其中包含許多3D盒子。R在一個大方塊內部可視化很多3D盒子

我的第一個粗略想法如下。在2D我可以用

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

上色每一個細胞的基質,使它看起來像大的矩形將包含在它的小矩形。

這怎麼能轉化爲3D?假設在3D中,大框的大小爲10x10x10。在實踐中,我想選擇盒子中1000個元素中的每一個的顏色。我知道rgl可以用來製作交互式3D圖,但是我在理解如何爲3D中的每個單元着色陣列。

如果您對某些更好的解決方案有一些建議,我會很樂意聽到他們的意見。

回答

0

如果我理解正確的話,我認爲這應該工作:

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立方體,和顏色是基於其中心在俄的歐氏距離。希望這會告訴你一種方法來適應你喜歡的顏色。

+0

非常感謝,這看起來非常好!在測試代​​碼時,我想到了幾個問題。是否可以分別爲各個小立方體設置alpha值?我需要這個來突出顯示一些立方體在大立方體中間帶有強烈的紅色(=使α大),並使其他方塊可能相當不可見(=α低)。另外,是否可以對大立方體的邊緣進行着色? – jorkku

+0

是的,我已經更新了另一個透明度向量的示例 –

+0

謝謝,我接受了您的答案,因爲它包含了我需要的一切。 – jorkku