在3D视图中堆叠几个表面图

时间:2015-02-24 09:37:36

标签: r plot 3d surface

让我们考虑一下,我有五个二维矩阵描述不同z层的磁场。可以如下获得2D平面图的漂亮,平滑版本:

data2_I<-matrix(c(1.0,1.0,0.6,0.6,0.7,0.9,0.9,0.5,0.5,0.5,0.7,0.9,0.9,0.6,0.3,0.4,0.7,0.9,0.9,0.7,0.5,0.5,0.6,0.9,0.9,0.7,0.6,0.6,1.0,1.0), nrow=5)
Z = as.vector(data2_I)
length(Z)
XY=data.frame(x=as.numeric(gl(5,1,30)),y=as.numeric(gl(5,6,30)))
t=Tps(XY,Z)
surface(t)

现在,如果我能得到一个3D绘图,在不同的z位置绘制这些曲面,那将会很棒。有可能这样做吗?

1 个答案:

答案 0 :(得分:0)

我找到了另一种方法:使用包rgl I和功能表面3D,我可以在一个open3d窗口中堆叠多个3D表面图。让我们看一个小例子:

library("rgl")
data2_I<-matrix(c(1.0,1.0,0.6,0.6,0.7,0.9,0.9,0.5,0.5,0.5,0.7,0.9,0.9,0.6,0.3,0.4,0.7,0.9,0.9,0.7,0.5,0.5,0.6,0.9,0.9,0.7,0.6,0.6,1.0,1.0), nrow=5)
data0_I<-matrix(c(1.0,1.0,0.6,0.6,0.7,0.9,0.9,0.5,0.5,0.5,0.7,0.9,0.9,0.6,0.3,0.4,0.7,0.9,0.9,0.7,0.5,0.5,0.6,0.9,0.9,0.7,0.6,0.6,1.0,1.0), nrow=5)
data1_I<-2*data0_I
data2_I<-1/data1_I

elv=0
offs=5*elv+1
z0 <- scale*data0_I        
z1 <- scale*data1_I
z2 <- scale*data2_I
x <- 1:nrow(z0)   
y <- 1:ncol(z0)   

palette <- colorRampPalette(c("blue","green","yellow", "red")) 
col.table <- palette(256)
open3d(windowRect=c(50,50,800,800))
surface3d(x, y, elv*z0, color = col.table[cut(z0, 256)], back = "lines") 
surface3d(x, y, elv*z1+1*offs, color = col.table[cut(z1, 256)], back = "lines")
surface3d(x, y, elv*z2+2*offs, color = col.table[cut(z2, 256)], back = "lines")
axes3d()
aspect3d(1,1,2)

包含变量offs和elv用于美观目的:offs控制两个表面图之间的空间,并提升surface3d-plot的z轴应如何缩放。由于我想要一个没有任何高程的2D曲面图,我将其设置为零。