当我有 3 个解释变量时如何为 3D 图形着色(persp)?

How to colour 3D graph (persp) when I have 3 explanatory variables?

如何为使用 persp 完成的 3D 图形着色?

请使用此数据重现问题:https://www.dropbox.com/s/vay1e86tdtclrf1/data.xlsx?dl=0

此 link 中显示的代码对我不起作用,因为我有 3 个解释变量和 2 个交互:Create 3D Plot Colored According to the Z-axis

当我试图使它适应我的情况时,我遇到了各种各样的错误。在我的情况下如何使用外部?或者得到 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

这个link用到了一个函数,但是我不是很懂:http://pj.freefaculty.org/guides/Rcourse/plot-3d/plots-3d.pdf

rv 是我的因变量 x, y, y2 是我的解释变量(请注意 y2 只是 y^2) 那么我的模型是 rv~x*y+y2+x:y2

我绘制 3D 图形的代码如下所示

    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

你能帮帮我吗?

遵循link中函数的逻辑:

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))