2015-05-07 7 views
3

У меня есть матрица 5x5 пример со следующими значениями:Как создать поверхностный график с отсутствующими значениями в R?

dat <- matrix(seq(1,13,0.5), nrow=5, byrow=TRUE) 
dat[seq(2,25,2)] <- NA 

1 | NA | 2 | NA | 3 
NA | 4 | NA | 5 | NA 
6 | NA | 7 | NA | 8 
NA | 9 | NA | 10 | NA 
11 | NA | 12 | NA | 13 

Я не могу за жизнь мне получить 3D поверхность участка, используя, например, persp3d() из-за недостающих значений. Разве нет способа, чтобы R мог просто интерполировать значения и все еще строить их?

+1

Много способов. Его спрашивали и отвечали раньше, поэтому вы должны приложить некоторые усилия при поиске. (Вероятно, я бы выбрал ответ «лесс», если бы вы представили MWE.) –

ответ

3

Хотя это, возможно, было задано раньше, я не мог найти аккуратный обработанный пример этого обстоятельства. Попробуйте это, что даст результат, то вы можете перейти к persp, image и т.д ...

#install.packages("akima") 
library(akima) 

nas <- !is.na(dat) 
interp(
    row(dat)[nas],  #row index - 'x' values 
    col(dat)[nas],  #col index - 'y' values 
    dat[nas],   #height data - 'z' values 
    xo=seq(1,nrow(dat)), #'x' values for output 
    yo=seq(1,ncol(dat)) #'y' values for output 
) 

#$x 
#[1] 1 2 3 4 5 
# 
#$y 
#[1] 1 2 3 4 5 
# 
#$z 
#  [,1] [,2] [,3] [,4] [,5] 
#[1,] 1.0 1.5 2.0 2.5 3.0 
#[2,] 3.5 4.0 4.5 5.0 5.5 
#[3,] 6.0 6.5 7.0 7.5 8.0 
#[4,] 8.5 9.0 9.5 10.0 10.5 
#[5,] 11.0 11.5 12.0 12.5 13.0