使用ComplexHeatmap包来绘制热图并进行个性化标注
iMeta | 2022年iMeta进展与审稿人致谢-CSDN博客
详细学习见:R语言教程|如何为热图添加指定的基因标记? - 知乎 (zhihu.com)
数据格式和基础版
模拟数据
## 热图并标记
rm(list = ls())
library(ComplexHeatmap)
library(circlize)
#生成数据
set.seed(123)
group1 <- runif(100, 3, 5)
group2 <- runif(100, 2, 7)
group3 <- runif(100, 30, 50)
group4 <- runif(100, 20, 70)
df <- data.frame(group1, group2, group3,group4)
#添加行名
rownames(df) <- paste("gene", 1:nrow(df), sep = "")
#由于scale函数默认对列进行归一化,因此这里做了两次转置;
df_scaled <- t(scale(t(df)))
head(df_scaled)
##基础版
Heatmap(df_scaled,row_names_gp = gpar(fontsize = 6)
,column_names_gp = gpar(fontsize = 8),
name = "exp")
dev.off()
#进行颜色修改
range(df_scaled)#标准化后数值范围
#[1] -0.9581163 1.3979563
#然后,根据数据范围建立自定义颜色映射关系;自定义颜色
col_fun = colorRamp2(c(-1,0.25,1.5), c("greenyellow","white", "red"))
#使用自定义渐变色绘制热图;
Heatmap(df_scaled,row_names_gp = gpar(fontsize = 6),
column_names_gp = gpar(fontsize = 8),
col = col_fun,##自己修改的颜色
name = "exp")
dev.off()
聚类树
#关于聚类树
p <- Heatmap(df_scaled,
row_names_gp = gpar(fontsize = 6),
column_names_gp = gpar(fontsize = 8),
column_split = 2,##添加gap
column_title = "ABCD",#标题
show_row_dend = FALSE,##是否显示聚类树
col = col_fun,##自己修改的颜色
name = "exp")
p
dev.off()
注释条和标注
##注释条
class = anno_block(gp = gpar(fill = c("blue","#FF9900"),
col="white"),height = unit(5, "mm"),
labels = c("AAAA", "BBBB"),
labels_gp = gpar(col = "white", fontsize = 8,fontface="bold"))
group= HeatmapAnnotation(group=class)
p <- Heatmap(df_scaled,
row_names_gp = gpar(fontsize = 6),
column_names_gp = gpar(fontsize = 8),
column_split = 2,##添加gap
column_title = "ABCD",#标题
cluster_rows = TRUE,
show_row_dend = FALSE,##是否显示聚类树
col = col_fun,##自己修改的颜色
top_annotation =group,#注释条
name = "exp")
p
dev.off()
#显示的具体数值标记
#anno_mark()其中at是原始数据矩阵的索引,标签是对应的文本
mark <- c("gene10","gene20","gene30","gene40","gene50")
lab = rowAnnotation(ano = anno_mark(at = c(10,20,30,40,50),
labels = mark,
labels_gp = gpar(fontsize = 8)))
p <- Heatmap(df_scaled,
row_names_gp = gpar(fontsize = 6),
column_names_gp = gpar(fontsize = 8),
column_split = 2,##添加gap
column_title = "ABCD",#标题
cluster_rows = TRUE,#行聚类
show_row_dend = FALSE,##是否显示行聚类树
show_column_dend = FALSE,##列聚类树
col = col_fun,##自己修改的颜色
top_annotation =group,#注释条
show_row_names = FALSE,#原来的行名不显示
right_annotation = lab,#注释的行名
row_names_side = "left",
name = "exp"##图例注释
)
p
dev.off()
感谢:ComplexHeatmap作者和基迪奥生物 !!