2013-03-16 84 views
2

我正在试图在Rcar包装中制作三维散点图。 MWE在下面给出。R通过汽车包装的三维散点图

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格式?

任何帮助将不胜感激。谢谢

+0

[也许有用吗?](https://stat.ethz.ch/pipermail/r-help/2010-June/243413.html) – 2013-03-16 12:04:12

+0

感谢@ user1317221_G的评论。你想介绍一下你的评论吗?谢谢 – MYaseen208 2013-03-16 12:14:45

+1

@ MYaseen208这个注释意味着你需要破解'scatter3d'函数以避免调用'rgl.points' ... – agstudy 2013-03-16 12:37:50

回答

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

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, 
         .... 
    

如果nwant调用分散式功能,你需要破解......

`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_