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

如何在ggbiplot的PCA图中修改图例形状并调整轴标签

ggbiplot绘制PCA图的需求解决:物种配色+自定义符号、轴标签优化

需求说明

  • 不同物种(species)对应不同颜色,同一物种下的不同生物(organism)使用不同符号
  • 将轴标签从默认的“PC1(x % explained var.)”格式修改为“PC1( x %)”

修正后的完整代码

setwd("~/Schwarze Johannisbeeren/SJ Wein mit nicht Sc/PCA/stackoverflow frage")
results = read.csv("results.csv", sep = ";", encoding = "UTF-8", header=TRUE, check.names=FALSE)

# 执行PCA分析
results.pca <- prcomp(results[,c(3:7)],       
                      center = TRUE,
                      scale. = TRUE)

# 提取主成分解释率,转为百分比并保留1位小数
pc_var <- round(summary(results.pca)$importance[2, ] * 100, 1)

library(ggplot2)
library(ggbiplot)

ggbiplot(results.pca, alpha=0, obs.scale = 1, var.scale = 1, 
         ellipse = TRUE, ellipse.prob=0.68, circle = F, 
         varname.size=0, var.axes = F, groups=results$species) +
  theme_bw()+
  # 映射颜色到物种、形状到单个生物
  geom_point(aes(colour = species, shape = organism), size=2)+
  # 自定义每个生物对应的点符号
  scale_shape_manual(values = c("Mt1"=1, "Mt2"=2, 
                                "Al1"=1, "Al2"=2, 
                                "Bg1"=1, "Bg2"=2, "Bg3"=3, 
                                "Cs1"=1, "Cs2"=2, "Cs3"=3, 
                                "Df1"=1, "Df2"=2, "Df3"=3))+
  # 物种配色方案(可根据需求调整palette)
  scale_color_brewer(name = "物种", type = "qual", palette = 2)+
  # 自定义轴标签格式
  labs(x = paste0("PC1 (", pc_var[1], "%)"),
       y = paste0("PC2 (", pc_var[2], "%)"),
       shape = "生物")+
  # 保留原有的主题样式设置
  theme(axis.text.x = element_text(size = 12, colour = "black", vjust = 0.5, hjust = 1, face= "bold"), 
        axis.title.y = element_text(size = 12, face = "bold"),
        axis.title.x = element_text(size = 12, face = "bold"),
        axis.text.y = element_text(colour = "black", size = 12, face = "bold"))

修改关键点解析

1. 物种与生物的视觉区分

  • 核心是在geom_point的aes中同时绑定colour到species、shape到organism,实现颜色按物种分组、符号按单个生物区分
  • 保留你原有的scale_shape_manual配置,确保每个organism对应指定符号
  • 启用scale_color_brewer并设置图例名称,让颜色分组更直观

2. 轴标签格式调整

  • 通过summary(results.pca)$importance提取主成分的解释率,转换为百分比格式
  • 使用labs()函数直接替换轴标题,生成你需要的“PC1( x %)”格式,去除默认标签中的冗余文本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:30:40