使用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
相关产品推荐
相关产品推荐

