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

如何为Pheatmap的82个行注释簇分配渐变色彩并解决报错

解决82个簇的渐变色彩分配及报错问题

报错原因

你遇到的Error: elements in col should be named vectors.是因为annotation_colors要求每个列表元素必须是命名向量(键为簇名称,值为对应颜色),但你用t(annoationdf)得到的是矩阵,不符合参数格式要求。

实现蓝/灰色渐变色彩分配的正确步骤

1. 生成渐变色彩

放弃randomcoloR(它用于生成高区分度的离散色,不适合渐变),改用colorRampPalette生成蓝/灰色系渐变色彩:

# 生成蓝色系渐变(从浅蓝到深蓝),共82个颜色
blue_palette <- colorRampPalette(c("#e6f2ff", "#003366"))(82)

# 或者生成灰色系渐变(从浅灰到深灰)
gray_palette <- colorRampPalette(c("#f0f0f0", "#333333"))(82)

2. 为颜色向量绑定簇名称

从你的数据中提取所有唯一簇名称,将其作为颜色向量的名称(确保簇名和颜色一一对应):

# 假设你的簇名称存储在annotation_row的cluster列,或原数据框的cluster列
unique_clusters <- unique(annotation_row$cluster)

# 给颜色向量命名(以蓝色系为例)
names(blue_palette) <- unique_clusters

3. 构建符合要求的annotation_colors

将命名后的颜色向量放入列表,作为annotation_colors的参数值:

ann_color <- list(cluster = blue_palette)

4. 调用pheatmap绘图

用正确的ann_color参数运行绘图代码:

library(pheatmap)

pheatmap(as.matrix(mat1), 
         cluster_cols = FALSE,
         cluster_rows = FALSE, 
         scale = "row", 
         main = "Expression", 
         show_rownames = F,
         cellwidth = 3, 
         cellheight = 3, 
         treeheight_row = 3, 
         treeheight_col = 3, 
         fontsize = 3, 
         annotation_row = annotation_row, 
         annotation_colors = ann_color)

额外说明

  • 如果你的簇数量不是恰好82,可将(82)替换为length(unique_clusters),保证颜色数量和簇数量一致
  • 可调整colorRampPalette里的起始和终止颜色,生成不同深浅的渐变效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:20:26