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

使用ggbiplot/ggplot2调整PCA biplot中载荷标签的位置

解决方案:优化PCA Biplot(删除默认短箭头、自定义长箭头及标签)

1. 先解决载荷数量异常问题

出现10个载荷但实际只有8个参数,大概率是你做PCA时不小心包含了非参数列(比如分组列、ID列)。先检查并修正PCA输入数据:

# 假设你的原始数据框是df,仅筛选8个参数列做PCA
params_df <- df[, c("参数1", "参数2", "参数3", "参数4", "参数5", "参数6", "参数7", "参数8")]
# 重新执行PCA(记得标准化)
pca <- prcomp(params_df, scale. = TRUE)
# 验证载荷数量,应该为8行
dim(pca$rotation)

2. 绘制自定义Biplot(保留长箭头、移除默认短箭头、优化标签)

直接关闭ggbiplot的默认变量箭头,自行绘制加长箭头+防重叠的灰色背景标签:

library(ggbiplot)
library(ggplot2)
library(ggrepel) # 用于标签防重叠

# 构建加长后的载荷数据(缩放因子可根据图表大小调整,比如1.5)
long_loadings <- as.data.frame(pca$rotation * 1.5)
long_loadings$param <- rownames(long_loadings)

# 绘制基础Biplot,关闭默认变量箭头和标签
p <- ggbiplot(pca,
              obs.scale = 1,
              var.scale = 1,
              var.axes = FALSE, # 关闭默认的短箭头
              labels = NULL, # 不需要样本标签可设为NULL,按需调整
              ellipse = FALSE) # 按需开启/关闭分组椭圆

# 添加自定义长箭头
p <- p + geom_segment(data = long_loadings,
                      aes(x = 0, xend = PC1, y = 0, yend = PC2),
                      arrow = arrow(length = unit(0.2, "cm")),
                      color = "black")

# 添加带灰色背景的标签,自动防重叠,直接定位到箭头末端
p <- p + geom_label_repel(data = long_loadings,
                          aes(x = PC1, y = PC2, label = param),
                          fill = "gray80", # 灰色背景
                          color = "black",
                          box.padding = 0.3,
                          point.padding = 0.5,
                          segment.color = NA) # 去掉标签到点的连线,因为直接在箭头末端

# 优化图表主题和轴标签
p <- p + theme_minimal() +
  labs(x = paste0("PC1 (", round(pca$sdev[1]^2/sum(pca$sdev^2)*100, 1), "%)"),
       y = paste0("PC2 (", round(pca$sdev[2]^2/sum(pca$sdev^2)*100, 1), "%)"))

print(p)

关键说明

  • var.axes = FALSE:彻底关闭ggbiplot自带的短箭头,避免和自定义长箭头重复
  • geom_label_repel:自带灰色背景(通过fill参数设置),同时自动调整标签位置避免重叠,segment.color = NA移除多余的连接线段
  • 加长箭头的缩放因子(示例中的1.5)可根据图表的轴范围自行调整,确保箭头长度合适

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:05:43