R语言pheatmap绘制热图如何添加行列分组颜色注释条
pheatmap 行/列侧边分组颜色注释实现方法
pheatmap 侧边分组注释通过annotation_row(行侧注释)、annotation_col(列侧注释)参数传入分组信息,搭配annotation_colors自定义分组配色即可实现目标效果,完整可运行代码如下:
# 加载依赖包 library(pheatmap) # 构建示例数据集(与原有示例一致,添加随机种子保证结果可复现) set.seed(123) Data <- data.frame(replicate(6,sample(0:1,6,rep=TRUE))) row.names(Data) <- c('Gene1','Gene2','Gene3','Gene4','Gene5','Gene6') colnames(Data) <- c("Strain1", "Strain2", "Strain3", "Strain4", "Strain5", "Strain6") # ---------------------- # 1. 构建行侧(基因)分组注释 # ---------------------- # 注释数据框行名必须和热图数据的行名完全一致 row_annotation <- data.frame( 耐药基因家族 = c( "Gene1" = "Group2", "Gene2" = "Group3", "Gene3" = "Group1", "Gene4" = "Group3", "Gene5" = "Group2", "Gene6" = "Group1" ) ) rownames(row_annotation) <- rownames(Data) # 强制匹配行名避免错位 # ---------------------- # 2. 构建列侧(菌株)分组注释 # ---------------------- # 注释数据框行名必须和热图数据的列名完全一致 col_annotation <- data.frame( 细菌属分类 = c( "Strain1" = "Band1", "Strain2" = "Band3", "Strain3" = "Band1", "Strain4" = "Band2", "Strain5" = "Band2", "Strain6" = "Band3" ) ) rownames(col_annotation) <- colnames(Data) # 强制匹配列名避免错位 # ---------------------- # 3. 自定义分组配色(可自行替换色值为需要的Color1-Color6) # ---------------------- ann_colors <- list( 耐药基因家族 = c( "Group1" = "#E64B35", # 对应要求的Color1 "Group2" = "#4DBBD5", # 对应要求的Color2 "Group3" = "#00A087" # 对应要求的Color3 ), 细菌属分类 = c( "Band1" = "#3C5488", # 对应要求的Color4 "Band2" = "#F39B7F", # 对应要求的Color5 "Band3" = "#8491B4" # 对应要求的Color6 ) ) # ---------------------- # 4. 绘制带侧边注释的热图 # ---------------------- pheatmap( Data, color = colorRampPalette(c("#FFE4B5","#708090"))(2), legend_breaks = c(1, 0), legend_labels = c("Presence", "Absence"), border_color = "black", display_numbers = FALSE, number_color = "black", fontsize_number = 8, # 传入分组注释和配色 annotation_row = row_annotation, annotation_col = col_annotation, annotation_colors = ann_colors, # 可选参数:关闭聚类即可保持基因、菌株的自定义顺序,与参考效果一致 cluster_rows = FALSE, cluster_cols = FALSE # 其他可选调整参数 # annotation_legend = FALSE, # 取消注释可隐藏分组注释的图例 # annotation_width = unit(1, "cm"), # 调整行侧注释条宽度 # annotation_height = unit(1, "cm") # 调整列侧注释条高度 )
注意事项
- 注释数据框的行名必须和热图输入数据的行名(行注释)、列名(列注释)完全匹配,否则会出现注释错位或报错
- 配色列表的名称必须和注释数据框的列名完全对应,列表内的命名向量名称必须和分组名完全一致,否则配色会失效
- 如果需要保留聚类结果,删除
cluster_rows = FALSE, cluster_cols = FALSE两行参数即可,注释条会自动跟随聚类结果排序
内容的提问来源于stack exchange,提问作者Taha Ahmed BENABBOU
相关产品推荐
相关产品推荐

