2014-09-08 4 views
0

Я хочу построить 3d-поверхность в R. Мои данные содержат NA.Поверхность R-графика, содержащая значения NA

# Topographic Surface Plot wanted! 
library(rgl) 
x<-seq(from = 0,to = 4000,by = 500) 
y<-seq(from = 10,to = 580,by = 60) 
z<-matrix(data = rbinom(n = 9*10,size = 10,prob = 0.7),nrow = length(y)) 
# Everybody can plot this in 3d, but my real world data contains empty space NA values like here: 
z[8:10,8:9]<-NA 
# Also, the y-axis is not homogeneous, it looks more like this: 
y<-y+rbinom(n = length(y),size = 15,prob = 0.4) 

Необходимая помощь: как можно построить накладную поверхность xyz?

Заранее благодарен!

ответ

0

Если вы не пытаетесь создать 3D-карту тепла, похоже, что у вас слишком много значений. Если вы хотите создать участок поверхности, Z должен быть массивом, а не матрицей. Плюс, пока он стоит, Z выводит значения NA. Это связано с линией z[8:10,8:9]<-NA.

Попробуйте то, что предлагается здесь: R: Plotting a 3D surface from x, y, z

0

Вы можете попробовать persp построить поверхность в 3D перспективе - она ​​также позволяет NA с и распределены неравномерно х и у значения:

# theta and phi control view angle  
persp(x=y,y=x,z=z, theta=50, phi = 40, zlim=c(0,15)) 

# for fancy colours: 
nr <- nrow(z) 
nc <- ncol(z) 

# Calculate value at center of each cell 
zfacet <- (z[-1, -1] + z[-1, -nc] + z[-nr, -1] + z[-nr, -nc])/4 

# Generate the desired colors 
cols = heat.colors(10) 

# Cut matrix values into 10 bins by manual breaks 
zbinned <- cut(zfacet, breaks=10) 

persp(x=y,y=x,z=z, theta=30, phi = 30, r=2, zlim=c(-15,15), col=cols[zbinned], ticktype='detailed')