2015-02-24 42 views
0

让我们考虑一下我有五个描述不同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) 

现在,这将是巨大的,如果我能得到一个三维图,其中在不同的Z位置,这些表面绘制:一个漂亮的,平滑的二维曲面图的版本可以按如下方式获得。有没有可能做到这一点?

+0

你应该包含与'TPS'相关的库函数。另外,这个例子不是可重复的 - 如果你给我们一个独立的例子(我们没有'data2_I'),人们更可能帮助你。 – jbaums 2015-02-28 00:03:02

+0

Ups,对不起,我忘记了包含这些数据。 – 2015-03-01 01:02:19

回答

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) 

变量offsand ELV包括用于美容目的:取舍控制两个面图和高程surface3d-地块的z轴应该如何扩展之间的空间。由于我想有一个没有任何高程的2D曲面绘图,我将它设置为零。