Persp in r,如何固定表面超出了盒子

时间:2018-07-26 21:41:04

标签: r plot regression predict perspective

我正在尝试创建一个清晰的透视图。我能够根据数据创建带有预测性“网格”的漂亮图,但是它超出了我的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))

我在运行代码时收到警告

  

在默认情况下(x = xseq,y = yseq,z = zp,col = color [facetcol],:     表面超出了盒子

我想切掉表面,使其在我的盒子极限处结束。

perspPlotExample

1 个答案:

答案 0 :(得分:0)

收到此警告有多种原因。您的xyz变量都超出了您设置的限制。 xy变量的解决方法是在必要时剪切变量。您可以将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))