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

