我正在尝试在R
到car
包中创建三维散点图。 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()
问题
任何帮助都将受到高度赞赏。感谢
答案 0 :(得分:1)
似乎改变色点不起作用。解决方案是破解功能。当我想破解一些R函数时,我将在下面给出一般性的方法。所以这是关于如何破解自定义使用功能的一般答案。
capture.output(getS3method('scatter3d','default'),file='my.scatter3d.R')
。这将使用该函数创建一个新文件。my.scatter3d
rgl.points
的行。最后你调用这样的函数:
source('my.scatter3d.R')
scatter3d(
z= Duncan$prestige
x= Duncan$income ,
y = Duncan$education,
....
如果你想调用分散公式函数,你需要破解......
`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")