我正在尝试创建一个清晰的透视图。我能够根据数据创建带有预测性“网格”的漂亮图,但是它超出了我的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],: 表面超出了盒子
我想切掉表面,使其在我的盒子极限处结束。
答案 0 :(得分:0)
收到此警告有多种原因。您的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))