You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言使用scatter3D绘制PCA前两个特征向量构成的三维平面

R plot3D绘制PCA前两个主成分张成平面的方法

你可以基于已有的代码,通过平面方程计算网格点坐标,再用surf3D()叠加到现有散点图上,完整实现逻辑如下:

核心原理

前两个特征向量张成的平面过样本均值点,平面的法向量为协方差矩阵的第三个特征向量(与前两个特征向量正交),根据平面方程可计算任意(x,y)对应的z坐标。

完整补充代码

接在你现有代码之后运行即可:

# 计算样本均值(平面过该点)
mu <- colMeans(X)
# 平面法向量为第三个特征向量
normal_vec <- Gamma[, 3]
# 生成覆盖样本点范围的xy网格
x_grid <- seq(min(X[,1]), max(X[,1]), length.out = 20)
y_grid <- seq(min(X[,2]), max(X[,2]), length.out = 20)
# 计算网格点对应的z值(根据平面方程推导)
z_mat <- outer(x_grid, y_grid, function(x,y) {
  (-normal_vec[1]*(x - mu[1]) - normal_vec[2]*(y - mu[2]))/normal_vec[3] + mu[3]
})
# 叠加平面到散点图,设置半透明保证散点可见
surf3D(x = x_grid, y = y_grid, z = z_mat, 
       add = TRUE, col = "lightblue", alpha = 0.3, colkey = FALSE)

# 可选补充:绘制样本点在平面上的投影点,验证效果
X_recon <- scale(X, center = TRUE, scale = FALSE) %*% Gamma[,c(1,2)] %*% t(Gamma[,c(1,2)]) + 
  matrix(mu, nrow = nrow(X), ncol = 3, byrow = TRUE)
points3D(X_recon[,1], X_recon[,2], X_recon[,3], 
         add = TRUE, col = "red", pch = 16, cex = 0.5)

参数说明

  • alpha = 0.3 控制平面透明度,可根据显示效果调整
  • length.out = 20 控制网格密度,数值越大平面越平滑
  • 投影点为红色小实心点,和原始散点对应可直观验证降维映射关系

内容的提问来源于stack exchange,提问作者Ejrionm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:54:05