2015-05-03 109 views
4

我想要在三维散点图中关于主要成分(主要成分作为这些椭圆的轴)可视化浓度椭球。我用选项椭圆函数scatter3d = TRUE将点和线添加到R中的三维散点图

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) 

作出这样的情节:

enter image description here

然后我试图加入 “中间点” 使用

points3d(mean(data3d[,1]), mean(data3d[,2]), mean(data3d[,3]), col="red", size=20) 

但这点不在它应该在的位置(在椭球体的中心): enter image description here

我想知道为什么以及如何重新调整它(?)。还有另一个问题,在这之后会出现如何将这个椭球的坐标轴添加到图中?

+1

'par3d()'表示该框已缩放为单位立方体? –

回答

5

看着car:::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)