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

