R:在rgl中的3D散点图中将滴线添加到拟合平面

时间:2014-10-09 19:19:54

标签: r 3d scatter-plot rgl

我制作了一个半透明平面的情节,通过rgl点云点拟合。 我到目前为止

library(rgl)
BLOOD_PRESSURE=c(132,143,153,162,154,168,137,149,159,128,166)
AGE=c(52,59,67,73,64,74,54,61,65,46,72)
WEIGHT=c(78,83,87,95,88,99,85,85,93,75,98)
fit=lm(BLOOD_PRESSURE~AGE+WEIGHT)
npp=10
plot3d(x=AGE, y=WEIGHT, z=BLOOD_PRESSURE, type="s", col=rainbow(length(BLOOD_PRESSURE))[rank(BLOOD_PRESSURE)], radius=1, zlab="")
grd <- expand.grid(AGE=seq(min(AGE),max(AGE),length.out=npp),
                   WEIGHT=seq(min(WEIGHT),max(WEIGHT),length.out=npp) )
grd$pred <-predict(fit, newdata=grd)
persp3d(x=unique(grd[[1]]), y=unique(grd[[2]]), 
        z=matrix(grd[[3]],npp,npp),  color="lightgrey",alpha=0.7, lit=T, back="lines", add=TRUE)

enter image description here

我想改进或添加的内容是:

  • 球体与拟合平面之间的虚线下划线
  • 将黑色网格添加到拟合平面
  • 还根据Z值
  • 对拟合平面进行颜色编码
  • 添加Z轴标签“血压”(但在Z轴旁边旋转)

有人知道我怎么能做到这一点?

编辑:为了回答代码下面的答案,我现在使用以下代码显示(一般)线性模型与实际数据点一起使用,使用Z轴颜色编码,并使用类似于{{的语法包plotPlane中的1}}:

rockchalk

enter image description here

1 个答案:

答案 0 :(得分:3)

所以这是四个问题。以下是其中两个的答案(在您完成定义grd后立即开始):

z <- matrix(grd[[3]],npp,npp)
col.palette <- rainbow(100)
colors <- col.palette[(z-min(z))*99/diff(range(z))+1]
persp3d(x=unique(grd[[1]]), y=unique(grd[[2]]), z=z, 
        color=colors, alpha=0.7, lit=T, back="lines", add=TRUE)

segments3d(x=rep(AGE,each=2),
           y=rep(WEIGHT,each=2),
           z=matrix(t(cbind(BLOOD_PRESSURE,predict(fit))),nc=1),
           col="red", lty=2)