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

使用R中autoplot绘制PCA双图时无法显示右侧图例的问题

解决autoplot绘制PCA双图无法显示图例的问题

问题出在你直接给colour参数传入了颜色值向量,而不是将颜色映射到数据中的分类变量。ggplot的图例是基于**美学映射(aes)**生成的,直接赋值颜色相当于硬编码,不会触发图例生成。

修改后的代码

autoplot(wine.pca, 
         colour = as.factor(wine$Colour),  # 映射到分类变量,而非直接传颜色值
         label.size = 3, 
         loadings=TRUE, loadings.label=TRUE, loadings.label.colour='black',
         loadings.label.vjust = 0, loadings.label.hjust=0,
         loadings.colour='black', scale=0, loadings.label.size=6, repel=TRUE)+
  xlab("Principal component 1 (25.4%)")+
  ylab("Principal component 2 (22.1%)")+
  ggtitle("PC1 vs PC2")+
  theme(plot.title=element_text(hjust=0.5, size=25),
        axis.title = element_text(size=15),
        legend.position="right")+
  scale_colour_manual(name = "Type", 
                      values = colvec1,  # 确保colvec1的命名与wine$Colour的因子水平匹配
                      labels = c("白葡萄酒", "红葡萄酒"),  # 手动指定图例标签(根据实际水平调整)
                      drop=FALSE)

关键改动说明

  • 将colour改为变量映射:把colour = colvec1[as.factor(wine$Colour)]改成colour = as.factor(wine$Colour),让ggplot识别这是一个分类变量的颜色映射,从而生成图例。
  • 调整scale_colour_manual:确保values参数的命名与wine$Colour的因子水平完全对应(比如如果wine$Colour的水平是"white"和"red",colvec1应该是c("white"="紫色", "red"="红色")这样的命名向量)。如果colvec1已经是按因子水平顺序排列的,也可以直接传向量,但命名更稳妥。
  • 移除无效代码:删掉guides(fill=TRUE),因为你用的是colour映射而非fill,这个设置对图例没有作用。

如果还是不显示图例,可以检查:

  • wine$Colour是否是因子类型,若不是,先用wine$Colour <- as.factor(wine$Colour)转换。
  • colvec1的长度是否与wine$Colour的因子水平数一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:55:19