【问题标题】:Plotting a wireframe AND a cloud with lattice in R在 R 中绘制线框和带格子的云
【发布时间】:2010-11-27 05:33:58
【问题描述】:

我有一个很好的曲面,它表示具有两个自变量的回归的非线性多部分回归结果。我想将回归预测值绘制为一个漂亮的 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

z 是我的光滑表面,z2 是我的嘈杂点,大多略高于表面。所以表面看起来像这样:

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

点云看起来像这样:

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

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

【问题讨论】:

    标签: r lattice wireframe


    【解决方案1】:

    我真的很喜欢 rgl!但有时格子中的 3-D 图也很有用 - 您可以编写自己的函数,您可以将其传递给格子函数的“面板”参数。例如,

    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)
    

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

    编辑:感谢您指出这一点,Aaron,那么您可能可以将 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)
    

    【讨论】:

    • 不错!但要使用来自z2 的点而不是z 用于云,请在mypanel 函数中使用panel.cloud(x,y,myGrid$z2)
    • 哦,云怎么画,但是对于不同的x和y?
    • 您可能可以 1) rbind() 将另一组 x,y,z 传递给 myGrid,2) 将分类值添加到 myGrid,以及 3) 将此分类变量(因子)传递给 groups 参数.
    【解决方案2】:

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

    另一方面,它为您提供(快速!)滚动、缩放……这是 lattice 无法做到的。

    【讨论】:

    • 我因为“我不玩游戏”而忽略了我的 Linux 机箱显卡,但我认为如果我不这样做,RGL 肯定会受益!
    • 我也保持简单(“没有游戏”),但 OpenGL 通常适用于非常简单的硬件。试一试——我记得你只需要二维支持。
    猜你喜欢
    • 1970-01-01
    • 2014-03-19
    • 2014-07-18
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多