I want to visualize concentration ellipsoids in 3d scatter plot in respect of principal components (principal components as axes of these ellipsoids). I used function scatter3d with option ellipsoid = TRUE
我想在三维散点图中显示关于主成分(主要成分作为这些椭球的轴)的浓度椭球。我使用函数scatter3d和选项ellipsoid = TRUE
data3d <- iris[which(iris$Species == "versicolor"), ]
library(car)
library(rgl)
scatter3d(x = data3d[,1], y = data3d[,2], z = data3d[,3],
surface=FALSE, grid = TRUE, ellipsoid = TRUE,
axis.col = c("black", "black", "black"), axis.scales = FALSE,
xlab = "X1", ylab = "X2", zlab = "X3", surface.col = "blue",
revolution=0, ellipsoid.alpha = 0.0, level=0.7, point.col = "yellow", add=TRUE)
to draw this plot:
画这个情节:
Then I was trying to add "mean point" using
然后我试图添加“平均点”使用
points3d(mean(data3d[,1]), mean(data3d[,2]), mean(data3d[,3]), col="red", size=20)
but this point is not in the place it's supposed to be (in the center of ellipsoid):
但这一点不在它应该的位置(在椭圆体的中心):
and I'm wondering why and how can I rescale it (?). And another question, which will arise after this how can I add axes of this ellipsoid to the plot?
我想知道为什么以及如何重新缩放它(?)。还有一个问题,在此之后会出现如何将这个椭圆体的轴添加到图中?
1 个解决方案
#1
Looking at car:::scatter3d.default
shows that the coordinates are internally scaled by the min and max of each dimension; the following code scales before plotting:
看车::: scatter3d.default显示坐标在内部按每个维度的最小值和最大值缩放;以下代码在绘图之前进行缩放:
sc <- function(x,orig) {
d <- diff(range(orig))
m <- min(orig)
(x-m)/d
}
msc <- function(x) {
sc(mean(x),x)
}
points3d(msc(data3d[,1]),
msc(data3d[,2]),
msc(data3d[,3]), col="red", size=20)
#1
Looking at car:::scatter3d.default
shows that the coordinates are internally scaled by the min and max of each dimension; the following code scales before plotting:
看车::: scatter3d.default显示坐标在内部按每个维度的最小值和最大值缩放;以下代码在绘图之前进行缩放:
sc <- function(x,orig) {
d <- diff(range(orig))
m <- min(orig)
(x-m)/d
}
msc <- function(x) {
sc(mean(x),x)
}
points3d(msc(data3d[,1]),
msc(data3d[,2]),
msc(data3d[,3]), col="red", size=20)