用R中的点阵绘制线框和云

JD *_*ong 9 r wireframe lattice

我有一个很好的表面,它代表了具有两个独立变量的回归的非线性多部分回归结果.我想将回归预测值绘制为一个漂亮的3D表面,然后将实际值显示为在表面上反弹的点.这将是绘制回归线并将实际值显示为线周围点的3D版本.我无法弄清楚如何用格子做到这一点.我很高兴在R中使用另一个图形库,但我不知道其他人做3D图.

这是我想要做的简化版本:

library(lattice)
#set up some simplified data
x <- seq(-.8, .8, .1)
y <- seq(-.8, .8, .1)
myGrid <- data.frame(expand.grid(x,y))
colnames(myGrid) <- c("x","y")
myGrid$z <- myGrid$x + myGrid$y
noise <- rnorm(length(myGrid$z),.3,.2)
myGrid$z2 <- myGrid$x + myGrid$y + noise
Run Code Online (Sandbox Code Playgroud)

z是我的光滑表面,z2是我的噪点,大部分位于表面之上.所以表面看起来像这样:

wireframe(myGrid$z ~ myGrid$x * myGrid$y, xlab="X", ylab="Y", zlab="Z")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

点云看起来像这样:

cloud(myGrid$z2 ~ myGrid$x * myGrid$y, xlab="X", ylab="Y", zlab="Z")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

是否有可能在一个格子面板中获得这两个?

hat*_*rix 7

我喜欢rgl!但有时格子中的三维图也很有用 - 你可以编写自己的函数,你可以将它传递给格子函数的'panel'参数.例如,

mypanel <- function(x,y,z,...) {
  panel.wireframe(x,y,z,...)
  panel.cloud(x,y,z,...)
}
wireframe(myGrid$z ~ myGrid$x * myGrid$y, xlab="X", ylab="Y", zlab="Z",
          panel=mypanel)
Run Code Online (Sandbox Code Playgroud)

您调用的最后一个函数可以是wireframe()或cloud(); 在任何一种情况下,因为在面板函数中调用panel.wireframe()和panel.cloud(),结果应该是相同的.

编辑:感谢你指出这一点,亚伦,那么你可能可以将z2作为另一个变量:

mypanel <- function(x,y,z,z2,...) {
  panel.wireframe(x,y,z,...)
  panel.cloud(x,y,z2,...)
}
wireframe(z ~ x * y, data=myGrid, xlab="X", ylab="Y", zlab="Z",
          panel=mypanel, z2=myGrid$z2)
Run Code Online (Sandbox Code Playgroud)

  • 太好了!但要使用"z2"而不是"z"中的点作为云,请在`mypanel`函数中使用`panel.cloud(x,y,myGrid $ z2)`. (2认同)

Dir*_*tel 0

如果没记错的话,Rcmdr 已经使用 rgl 为您完成了此操作。不过,这可能仅限于 Rcmdr 适合的模型。

另一方面,它可以让你(快速!)滚动、缩放……这是点阵无法做到的。