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

在ggplot2/ggfortify中为PCA图配置多组连续调色板及自定义标签颜色

R语言PCA可视化问题解决方法

问题1:给col2每个组配独立的连续调色板

要实现同形状(col2)组内用统一色系的连续色,不同形状用不同色系,直接分层绘图或者用ggnewscale包都能搞定。

方法1:分层绘制(无需额外包)

拆出col2的每个组,分别添加图层,为每个图层指定对应色系的渐变:

library(ggplot2)
library(ggfortify)
library(colorspace) # 用来生成平滑连续色系,也可手动写颜色向量

# 初始化绘图,先不设置颜色和形状
df.pca.plot <- autoplot(df.pca, data = df, colour = NA, shape = NA) +
  # 第一个col2组(比如"Triangle")用紫色系
  geom_point(data = subset(df, col2 == "Triangle"), 
             aes(x = PC1, y = PC2, colour = col1, shape = col2)) +
  scale_colour_gradientn(colours = sequential_hcl(10, palette = "Purple")) +
  # 第二个col2组(比如"Diamond")用橙色系
  geom_point(data = subset(df, col2 == "Diamond"), 
             aes(x = PC1, y = PC2, colour = col1, shape = col2)) +
  scale_colour_gradientn(colours = sequential_hcl(10, palette = "Orange")) +
  # 第三个col2组(比如"Circle")用绿色系
  geom_point(data = subset(df, col2 == "Circle"), 
             aes(x = PC1, y = PC2, colour = col1, shape = col2)) +
  scale_colour_gradientn(colours = sequential_hcl(10, palette = "Green")) +
  # 保留形状的默认映射
  scale_shape_discrete() +
  theme_bw()

不想用colorspace的话,直接写颜色向量也行,比如colours = c("#f8e7f2", "#a851a1", "#5a1e5c")。

方法2:用ggnewscale简化代码

如果分组多,分层太繁琐,用ggnewscale可以快速添加多个颜色比例尺:

library(ggnewscale)

df.pca.plot <- autoplot(df.pca, data = df, shape = 'col2') +
  # 第一个组的颜色映射
  geom_point(data = subset(df, col2 == "Triangle"), aes(colour = col1)) +
  scale_colour_gradientn(colours = sequential_hcl(10, "Purple")) +
  new_scale_colour() + # 开启新的颜色比例尺,不影响之前的设置
  # 第二个组的颜色映射
  geom_point(data = subset(df, col2 == "Diamond"), aes(colour = col1)) +
  scale_colour_gradientn(colours = sequential_hcl(10, "Orange")) +
  new_scale_colour() +
  # 第三个组的颜色映射
  geom_point(data = subset(df, col2 == "Circle"), aes(colour = col1)) +
  scale_colour_gradientn(colours = sequential_hcl(10, "Green")) +
  theme_bw()

问题2:自定义col2组的标签颜色

你之前的问题是fviz_pca_ind已经用col.ind绑定了col1的颜色映射,后续标签颜色会和这个映射冲突,用ggnewscale添加新的颜色比例尺就能解决:

library(ggnewscale)
library(factoextra)
library(ggplot2)

fviz_pca_ind(df.pca,
             col.ind = col1, # 点的颜色用col1的调色板
             geom="point",
             palette = paletteer_c("grDevices::rainbow", 26),
             addEllipses = TRUE,
             ellipse.type = "confidence",
             repel = TRUE) +
  new_scale_colour() + # 新建颜色映射上下文,和点的颜色分开
  geom_text_repel(aes(label=rownames(df), colour=col2), 
                  data = df, # 明确指定数据,避免语法问题
                  show.legend=FALSE) +
  # 自定义col2每个组的标签颜色,替换成你实际的分组名和颜色
  scale_colour_manual(values = c("Group1" = "#ff3333", "Group2" = "#3366ff", "Group3" = "#33cc33"))

记得把代码里的Group1/Group2/Group3换成你col2里实际的分组名称,颜色也可以改成你喜欢的十六进制色或颜色名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:13:28