2009-09-10 38 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

相關問題