我想通过scatterplot3d绘制响应面图形,但通过错误绘制以下代码。
library(rsm)
swiss2.lm <- lm(Fertility ~ poly(Agriculture, Education, degree = 2), data = swiss)
persp(swiss2.lm, Education ~ Agriculture, zlab = "Fertility")
library(scatterplot3d)
s3d <-
scatterplot3d(
swiss
# , type = "h"
, highlight.3d = TRUE
, angle = 55
, scale.y = 0.7
, pch = 16
)
s3d$plane3d(swiss2.lm, lty.box = "solid")
如果您能帮助解决此问题,我们将不胜感激。谢谢
开斋节
Error in segments(x, z1, x + y.max * yx.f, z2 + yz.f * y.max, lty = ltya, :
cannot mix zero-length and non-zero-length coordinates
我正在使用
swiss
库中的rsm
数据。 最佳答案
您对scatterplot3d
有多重视?如果您愿意使用rgl
做到这一点,那就很容易了。以下是您的示例:
设置均匀间隔的网格并进行预测:
newdat <- expand.grid(Education=seq(0,50,by=5),
Agriculture=seq(0,100,by=10))
newdat$pp <- predict(swiss2.lm,newdata=newdat)
绘制点并添加表面:
library(rgl)
with(swiss,plot3d(Agriculture,Education,Fertility))
with(newdat,surface3d(unique(Agriculture),unique(Education),pp,
alpha=0.3,front="line"))
rgl.snapshot("swiss.png")
rgl
具有一些优点(隐藏线去除,照明效果,动态旋转和缩放)和一些缺点(不适用于基本包装布局等);更难于处理字体,包括plotmath
公式等;更难于调整标签放置和绘图样式)。 scatter3d
包中的car
函数具有一些不错的功能,可以将回归曲面添加到rgl
图中,但是据我所知,它具有加法模型,但不允许二次多项式模型...据我所知,为了在
scatterplot3d
框架中执行此操作,您将必须构造与回归曲面中的四边形相对应的点,并使用xyz.convert
和segments
绘制它们。