如何为PCA双标图中的载荷向量设置不同颜色?
为PCA载荷向量设置不同颜色
你已经成功筛选出对PC1、PC2贡献最大的载荷变量(Petal.Length和Sepal.Width),要给这两个载荷向量(箭头)和标签设置不同颜色,可以通过修改ggfortify生成的图层数据和美学映射来实现,具体代码如下:
library(tibble) library(ggplot2) library(ggfortify) library(tidyverse) pca <- prcomp(iris[, 1:4], scale.=TRUE) # 找出对PC1和PC2贡献最大的载荷变量 pca_loadings <- pca$rotation %>% as_tibble(rownames="measurement") pca_topmeasurement <- pca_loadings %>% select(measurement, PC1, PC2) %>% pivot_longer(matches("PC"), names_to = "PC", values_to = "loading") %>% group_by(PC) %>% arrange(desc(abs(loading))) %>% slice(1:1) %>% pull(measurement) %>% unique() # 生成基础PCA双图 pca_bi <- autoplot(pca, x=1, y=2, data=iris, colour='Species', loadings=TRUE, loadings.label=TRUE) + ggtitle("PCA双图(高亮关键载荷)") # 筛选并修改载荷箭头图层的数据,添加颜色映射 loadings_segment_data <- pca_bi$layers[[2]]$data[pca_topmeasurement, ] %>% mutate(colour = case_when( rownames(.) == "Petal.Length" ~ "#e74c3c", # 给Petal.Length设置红色 rownames(.) == "Sepal.Width" ~ "#3498db" # 给Sepal.Width设置蓝色 )) pca_bi$layers[[2]]$data <- loadings_segment_data # 更新箭头图层的美学映射,使用自定义颜色 pca_bi$layers[[2]]$mapping <- aes(xend = x, yend = y, colour = colour) # 筛选并修改载荷标签图层的数据,同步颜色 loadings_label_data <- pca_bi$layers[[3]]$data[pca_topmeasurement, ] %>% mutate(colour = case_when( rownames(.) == "Petal.Length" ~ "#e74c3c", rownames(.) == "Sepal.Width" ~ "#3498db" )) pca_bi$layers[[3]]$data <- loadings_label_data # 更新标签图层的美学映射 pca_bi$layers[[3]]$mapping <- aes(label = label, colour = colour) # 可选:统一管理图例颜色,确保物种和载荷颜色都正确显示 pca_bi <- pca_bi + scale_colour_manual( values = c( "setosa"="#9b59b6", "versicolor"="#2ecc71", "virginica"="#f1c40f", "Petal.Length"="#e74c3c", "Sepal.Width"="#3498db" ) ) print(pca_bi)
关键说明:
- 通过
mutate给筛选后的载荷数据添加colour列,为每个目标变量指定专属颜色 - 更新
geom_segment(箭头)和geom_text(标签)图层的美学映射,让它们绑定自定义的颜色列 - 可根据需求替换颜色值,或通过
scale_colour_manual统一管理所有元素的颜色,保证图例显示准确
内容的提问来源于stack exchange,提问作者wantingtoimprove
相关产品推荐
相关产品推荐

