R通过汽车包装的三维散点图

时间:2013-03-16 11:38:44

标签: r graph

我正在尝试在Rcar包中创建三维散点图。 MWE如下所示。

pdf(file = "Hyperellipsoid.pdf")
library(car)
scatter3d(
    prestige ~ income + education
  , xlab = ""
  , ylab = ""
  , zlab = ""
  , surface=FALSE
  , fill=FALSE
  , grid=TRUE
  , axis.scales=FALSE
  , ellipsoid=TRUE
  , axis.col= "white"
  , square.col= "white"
  , point.col = "white"
  , data=Duncan
  )
dev.off()

enter image description here

问题

  1. 如何从图中删除数据圈?
  2. 如何将图格保存为pdf格式?
  3. 任何帮助都将受到高度赞赏。感谢

2 个答案:

答案 0 :(得分:1)

似乎改变色点不起作用。解决方案是破解功能。当我想破解一些R函数时,我将在下面给出一般性的方法。所以这是关于如何破解自定义使用功能的一般答案。

  1. capture.output(getS3method('scatter3d','default'),file='my.scatter3d.R')。这将使用该函数创建一个新文件。
  2. 然后,打开文件,删除最后2行。你给这个函数命名。例如:my.scatter3d
  3. 更改您致电rgl.points的行。
  4. 最后你调用这样的函数:

     source('my.scatter3d.R')
     scatter3d(
            z= Duncan$prestige 
            x= Duncan$income ,
            y = Duncan$education,
            ....
    
  5. 如果你想调用分散公式函数,你需要破解......

      `capture.output(getS3method('scatter3d','formula'),file='my.scatter3dformlua.R')` 
    

    并更改行

      scatter3d(X[, 2], X[, 1], X[, 3], xlab = xlab, ylab = ylab, 
                zlab = zlab, labels = labels, radius = radius, ...)
    

      my.scatter3d(X[, 2], X[, 1], X[, 3], xlab = xlab, ylab = ylab, 
                zlab = zlab, labels = labels, radius = radius, ...)
    

    PS

    如果函数抱怨找不到函数,通常我们将包名称添加为anemspace, 例如:

     rgl:::FUNCTION_
    

答案 1 :(得分:1)

你真的不需要破解完整的散点图功能(你可以通过car:::scatter3d.default更容易看到);你可以使用car:::ellipsoid

library("car")
dmat <- subset(Duncan,select=c(income,education,prestige))
dfn <- 3
dfd <- nrow(Duncan) - 1
level <- 0.95
ell.radius <- sqrt(dfn * qf(level, dfn, dfd))
library("rgl")
open3d()
rgl.material(color="blue")
ellips <- car:::ellipsoid(center = colMeans(dmat),
            shape = cov(dmat),
            radius = ell.radius)
wire3d(ellips)
rgl.postscript("ell3d.pdf",fmt="pdf")

enter image description here