如何给热图heatmap添加指定的标签?

当我们画热图(heatmap)的时候,如果基因的名字比较多的时候,在热图中展示的话,就会出现名字重叠的情况,针对这个情况,我们有两种比较好的解决办法,第一是在热图中仅显示关注的基因名,其余基因名不显示;第二种方法是画环状热图。今天以第一种热图为例,来教小伙伴们如何实现。
话不多数,直接上代码:

  1. 首选安装依赖的程序包,后面绘图要用到。
# 安装包
if (!requireNamespace("BiocManager", quietly = TRUE)){install.packages("BiocManager")}
if (!requireNamespace("ComplexHeatmap", quietly = TRUE)){BiocManager::install("ComplexHeatmap")} 
if (!requireNamespace("pals", quietly = TRUE)){BiocManager::install("pals")}
if (!requireNamespace("openxlsx", quietly = TRUE)){BiocManager::install("openxlsx")}
if (!requireNamespace("dplyr", quietly = TRUE)){BiocManager::install("dplyr")}

2 .程序包安装好后,加载程序包

# 加载包
library(ComplexHeatmap)
library(openxlsx)
library(dplyr)
library(pals)

3.读取绘图用到的数据,我们的数据格式行为基因名,列为样本


画热图用到的数据
# 读入数据,并归一化(按照行归一化)
# 因为scale()函数默认是对矩阵按列标准化,所以本次转置了2次

df <- read.xlsx("heatmapIN.xlsx",rowNames = T) %>%
  t() %>% 
  scale() %>%
  t()

4.选择热图中要显示的基因名,可以选择自己比较关注的基因。

# 指定要显示的基因,以及确定基因的索引(位置)
gene.select <- c("KRT14","IGFBP2","LBP","PGAM1",
                 "LCAT","ITIH2", "ITIH1","PZP",
                 "HBD","KRT6A","APOA1",
                 "APOE","C4BPB")
pos <- which(rownames(df) %in% gene.select)

5.行注释(即展示选择的基因在热图中进行展示)

# 行注释
label <- rowAnnotation(
  Zscore = anno_mark(at = pos,
                  labels = gene.select,
                  labels_gp = gpar(fontsize = 10),
                  lines_gp = gpar())
)

6.列注释(我们用的数据列是样本,即对样本的注释信息)


列注释用到的数据
# 列注释
col.df <- read.xlsx("anno_df.xlsx",rowNames = T)
col_anno <-  columnAnnotation(
  Status = col.df[,1] %>% as.factor(), # 必须保证注释的信息为因子水平,所以需要as.factor()
  Class = col.df[,2] %>% as.factor(),
  Group = col.df[,3] %>% as.factor()
)

7.绘图,保存结果

p <- Heatmap(
  df,
  name = "Zscore",
  row_names_gp = gpar(fontsize = 8),
  rect_gp = gpar(col = "gray"),
  cluster_rows = F,
  cluster_columns = F,
  show_column_names = F,
  show_row_names = F,
  right_annotation = label,
  top_annotation = col_anno
)

png("heatmap.png", res = 100, width = 10, height = 8, units = 'in')
p
dev.off()

最终画的热图效果如下:

最终画的热图效果

下次教小伙伴们,如何画环状热图哈,需要完整代码和案例的同学,可以给我留言哈!都看到这里了,还不点赞+关注么!

你可能感兴趣的:(如何给热图heatmap添加指定的标签?)