Как раскрасить 3D-график (persp), когда у меня есть 3 независимые переменные?

Как раскрасить трехмерный график, который я сделал с помощью persp?

используйте эти данные, чтобы воссоздать проблему: https://www.dropbox.com/s/vay1e86tdtclrf1/data.xlsx?dl=0

Код, показанный в этой ссылке, у меня не работает, потому что у меня есть 3 поясняющие переменные и 2 взаимодействия: Создать 3D-график, окрашенный в соответствии с осью Z

Я получил все виды ошибок, когда я пытался адаптировать его к моему делу. Как использовать внешний в моем случае? или получить zfacet = z1[-1, -1] + z1[-1, -ncz] + z1[-nrz, -1] + z1[-nrz, -ncz]

Например:

Error in seq.int(rx[1L], rx[2L], length.out = nb) : 'from' must be finite
In addition: Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf

В этой ссылке используется функция, но я ее не совсем понимаю: http://pj.freefaculty.org/guides/Rcourse/plot-3d/plots-3d.pdf

rv — моя зависимая переменная, x, y, y2 — мои независимые переменные (обратите внимание, что y2 — это просто y^2), тогда моя модель rv~x*y+y2+x:y2

Мой код для построения трехмерного графика выглядит так

    library(akima)

x <- data$x
y <- data$y
y2 <- y^2
z <- data$rv
m <- glm(rv ~ x*y+y2+x:y2, family=gaussian)

i <- 5
xtemp <- seq(min(x),max(x),length.out=i)
xrange <- rep(xtemp,times=i) 
ytemp <- seq(min(y),max(y),length.out=i)
yrange <- rep(ytemp,each=i) 
y2temp <- seq(min(y),max(y),length.out=i)
y2range <- rep(ytemp,each=i) 
newdata <- data.frame(x=xrange,y=yrange,y2=y2range)

zhat <- predict(m,newdata=newdata,type=c("response")) 

xyz <- interp(xrange,yrange,that)

quartz()
persp(xyz,theta = 35, phi = 50,col="white", border="grey40", ticktype = "detailed", zlim=c(1,7)) -> res2

Не могли бы вы мне помочь?


person MSS    schedule 04.04.2016    source источник
comment
Где определены that и m?   -  person adaien    schedule 05.04.2016
comment
спасибо, я только что добавил эту часть.   -  person MSS    schedule 05.04.2016


Ответы (1)


Следуя логике функции в ссылке:

jet.colors <- colorRampPalette( c("#ffcccc", "#cc0000") )
nbcol <- 100
color <- jet.colors(nbcol)
nrz <- length(xyz[[1]])
ncz <- length(xyz[[2]])
z<-xyz[[3]]
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]
facetcol <- cut(zfacet, nbcol)

persp(xyz,theta = 35, phi = 50,col=color[facetcol], border="grey40", ticktype = "detailed", zlim=c(1,7))
person adaien    schedule 05.04.2016