Persp in r, как закрепить поверхность выходит за пределы коробки

Я пытаюсь создать чистый перспективный сюжет. Я могу создать хороший график с прогнозирующей «сеткой» на основе моих данных, однако он выходит за пределы моих ограничений x и y. Мой код ниже. Прошу прощения за отсутствие воспроизводимых данных.

dat<-data.frame(x,y,z);rm(x,y,z)
m1i<-(lm(z~poly(y,2)*x, data=dat))
xr<-range(dat$x)
xseq<-seq((xr[1]-1),xr[2], length=30)#the subtraction just made my prediction limits larger than what my data has- so it predicts for data I don't have
yr<-range(dat$y)
yseq<-seq((yr[1]-0.5),yr[2], length=30)#same as above, just so my predictions started at 0
zp<-outer(xseq,yseq, function(a,b) predict(m1i, newdata=data.frame(x=a,y=b)))
nrz<-nrow(zp)
ncz<-ncol(zp)
jet.colors<-colorRampPalette(c("grey60","white"))
nbcol<-100
color<-jet.colors(nbcol)
zfacet<-zp[-1,-1]+zp[-1,-ncz]+zp[-nrz,-1]+zp[-nrz,-ncz]
facetcol<-cut(zfacet,nbcol)

res<-persp(x=xseq,y=yseq,z=zp, col=color[facetcol],theta=40, phi=10, 
ylab="Set Time (hr)", xlab="Distance (m)",
       zlab="Proportion Captured", nticks=5, ticktype="detailed", 
xlim=c(0,5),
       ylim=c(0,4), zlim=c(0,1.1))

Я получаю предупреждение при запуске кода

В persp.default(x = xseq, y = yseq, z = zp, col = color[facetcol], : поверхность выходит за пределы поля

Я хотел бы отрезать поверхность так, чтобы она заканчивалась за пределами моей коробки.

пример perspPlot


person Cat    schedule 26.07.2018    source источник


Ответы (1)


Есть несколько причин, по которым вы можете получить это предупреждение. Либо ваша переменная x, y или z выходит за установленные вами пределы. Исправление для переменных x и y состоит в том, чтобы вырезать переменные там, где это необходимо. Переменной z можно присвоить значение NA. Ниже приведен воспроизводимый пример.

# generate data
N <- 100
x <- rnorm(N, 2, 0.5)
y <- rnorm(N, 2, 0.4)
z <- 0.1*y^2 * x + rnorm(N)
dat<-data.frame(x,y,z);rm(x,y,z)

# run code from question (not copied)

# set z beyond limit to NA
zp[zp < 0] <- NA
zp[zp > 1.1] <- NA

# plot
persp(x = xseq[xseq > 0 & xseq < 5],
      y = yseq[yseq > 0 & yseq < 4],
      z = zp[xseq > 0 & xseq < 5, yseq > 0 & yseq < 4], 
      theta = 40, phi = 10, 
      ylab = "Set Time (hr)", xlab = "Distance (m)",
      zlab = "Proportion Captured", nticks = 5, ticktype = "detailed", 
      xlim = c(0,5),
      ylim = c(0,4), 
      zlim = c(0,1.1))
person shadow    schedule 30.07.2018