2009-09-10 45 views
9

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

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

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 

z是我的光滑的表面和Z2是我吵点大多略微露出水面。所以,表面上看起来是这样的:

wireframe(myGrid$z ~ myGrid$x * myGrid$y, xlab="X", ylab="Y", zlab="Z") 

alt text http://www.cerebralmastication.com/wp-content/uploads/2009/09/wireframe.png

和点云看起来是这样的:

cloud(myGrid$z2 ~ myGrid$x * myGrid$y, xlab="X", ylab="Y", zlab="Z") 

alt text http://www.cerebralmastication.com/wp-content/uploads/2009/09/cloud.png

是否有可能在一个到达这两个格子板?

回答

0

如果内存服务,Rcmdr已经使用rgl为您做了这个。不过,这可能仅限于Rcmdr适用的型号。

另一方面,它给你(快!)滚动,缩放,......格不能做。

+0

我在我的Linux机器的显卡skimped,因为“我不玩游戏”,但我认为如果我另有决定,RGL肯定会受益! – hatmatrix 2009-09-15 13:33:23

+0

我也保持简单(“没有游戏”),但OpenGL经常在非常简单的硬件上工作。试试看 - 我记得你只需要2D支持。 – 2009-09-15 15:26:41

6

我爱rgl!但有时候,格子中的3D图也是有用的 - 你可以编写自己的函数,你可以将它传递给格子函数的“面板”参数。例如,

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) 

调用最后一个函数可以线框()或云();在这两种情况下,因为在面板函数中调用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) 
+2

不错!但是,要使用来自'z2'而不是'z'的点作为云,请使用'mypanel'函数中的'panel.cloud(x,y,myGrid $ z2)'。 – Aaron 2011-02-03 19:31:44

+0

哦,以及如何绘制云,但对于不同的x和y's? – Rekin 2011-02-17 22:33:39

+0

你可以1)将另一组x,y,z到myGrid,2)向myGrid添加一个分类值,以及3)将这个分类变量(factor)传递给groups参数。 – hatmatrix 2011-02-18 03:28:24

相关问题