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

pheatmap绘制热图时出现RColorBrewer NA无效调色板报错如何解决?

报错核心原因
  • 第一个Error in RColorBrewer::brewer.pal(n, pal)报错:pheatmap默认调用RColorBrewer生成注释配色,你的注释数据框结构完全错误。annotation_col要求注释框行名对应热图的列名(样本名),列对应注释分类,你执行colnames(df) = colnames(data)后,注释框列数和样本数一致,pheatmap识别不到合法的注释分类,生成配色时传入了NA值触发报错。
  • 第二个more elements supplied than there are to replace报错:你自定义的注释配色列表结构、名称或数量和实际注释分类不匹配,无法对应上。
解决步骤

1. 修正注释数据框结构

假设你的Annotation向量顺序和热图列(样本)的顺序完全对应,3种聚类为注释的唯一分类,修正后的构造代码如下:

data <- as.matrix(Round_1)                                                            
library(pheatmap)
# 构造注释框:列是注释分类(此处命名为Cluster),行名对应热图的列名
df <- data.frame(
  Cluster = factor(Annotation), # 转为因子可固定分类顺序
  row.names = colnames(data)
)

2. 测试基础绘图

此时调用pheatmap不会再触发第一个配色NA报错:

pheatmap(data, cluster_rows = FALSE, cellwidth = 10, cellheight = 12, annotation_col = df)

3. 自定义注释配色(可选)

如果需要手动指定3个聚类的配色,构造和注释完全匹配的配色列表即可,注意列表名要和注释框的列名完全一致,颜色命名要和注释分类的取值完全对应:

# 先查看注释分类的取值,确认3个分类的命名
levels(df$Cluster)
# 构造配色列表
ann_colors <- list(
  # 假设分类为C1、C2、C3,替换为你实际的分类名即可
  Cluster = c("C1" = "#E41A1C", "C2" = "#377EB8", "C3" = "#4DAF4A")
)
# 绘图时传入配色参数
pheatmap(data, cluster_rows = FALSE, cellwidth = 10, cellheight = 12, 
         annotation_col = df, annotation_colors = ann_colors)
注意事项
  • Annotation的顺序必须和data的列顺序完全一致,否则注释会和样本对应错误
  • 自定义配色时列表的层级、命名必须和注释分类完全匹配,否则会触发元素数量不匹配的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 06:24:04