熱圖用來對采集的因子響應強度或其他的一些因素進行歸一化,從而利用顏色條的變化來直觀地表示不同樣本之間的變量變化情況。
其本質是有一個個用預設顏色表示數值大小的小方格組成的一個數據矩陣,并通過對因子或樣本進行聚類,從而觀察不同樣品數據間的相似性。
R中繪制基因表達熱圖的方法
由于熱圖的畫法較多,小編對以下幾種比較常用的畫法做了歸納。
01.使用heatmap函數繪制熱圖
Heatmap的畫法比較簡單,參數較少。
df <-read.delim("https://www.bioladder.cn/shiny/zyp/demoData/heatmap/data.heatmap.txt", #文件名稱 注意文件路徑,格式
header = T, # 是否有標題
sep = "\t", # 分隔符是Tab鍵
row.names = 1, # 指定第一列是行名
fill=T) # 是否自動填充,一般選擇是
########heatmap########
dt<-as.matrix(df)
###顏色###
cmcolor <- cm.colors(256)
rowcolor <- rainbow(nrow(dt), start = 0, end = 0.3)
colcolor <- rainbow(ncol(dt), start = 0, end = 0.3)
####繪圖
heatmap(dt,scale = "row",
RowSideColors = rowcolor,
ColSideColors = colcolor,
margins = c(6,10),
xlab = NULL,
ylab = NULL)

02.使用pheatmap包畫熱圖
pheatmap包由于用法簡單,個性化參數較多,故非常受歡迎,是主流的熱圖繪制工具,這里簡單介紹一種熱圖畫法。
####加載包###
library(pheatmap)
dfSamplehttps://www.bioladder.cn/shiny/zyp/demoData/heatmap/sample.class.txt",header = T,row.names = 1,fill = T,sep = "\t")
dfGene<-read.delim("https://www.bioladder.cn/shiny/zyp/demoData/heatmap/gene.class.txt",
header = T,row.names = 1,fill = T,sep = "\t")
#####繪圖#####
pheatmap(df,
annotation_row=dfGene, # (可選)指定行分組文件
annotation_col=dfSample, # (可選)指定列分組文件
show_colnames = TRUE, # 是否顯示列名
show_rownames=TRUE, # 是否顯示行名
fontsize=8, # 字體大小
display_numbers=F, #是否顯示值
number_format="%.3f", #顯示值保留小數位數
color = colorRampPalette(c('#0000ff','#ffffff','#ff0000'))(50), # 指定熱圖的顏色
annotation_legend=TRUE, # 是否顯示圖例
# legend_breaks=c(0.05,0.25,0.5,0.75,0.95),#圖例范圍設置
# legend_labels=c("0.05","0.25","0.5","0.75","0.95"),#圖例坐標設置
border_color=NA, # 邊框顏色 NA表示沒有
scale="row", # 指定歸一化的方式。"row"按行歸一化,"column"按列歸一化,"none"不處理
cluster_rows = TRUE, # 是否對行聚類
cluster_cols = TRUE # 是否對列聚類
)

03.使用ComplexHeatmap包畫熱圖
ComplexHeatmap包是一個繪制復雜熱圖的神器,這里主要介紹如何組合熱圖的畫法。
###安裝及加載ComplexHeatmap包#####
# if (!requireNamespace("BiocManager", quietly = TRUE))
# install.packages("BiocManager")
# BiocManager::install("ComplexHeatmap")
library(ComplexHeatmap)
library(circlize)
###顏色設置#####
col_rnorm = colorRamp2(c(-3, 0, 3), c("green", "white", "red"))
col_runif = colorRamp2(c(0, 3), c("white", "orange"))
col_letters = c("a" = "pink", "b" = "purple", "c" = "blue")
######數據設置
set.seed(123)
mat1 = matrix(rnorm(80, 2), 8, 10)
mat1 = rbind(mat1, matrix(rnorm(40, -2), 4, 10))
rownames(mat1) = paste0("R", 1:12)
colnames(mat1) = paste0("C", 1:10)
mat2 = matrix(runif(60, max = 3, min = 1), 6, 10)
mat2 = rbind(mat2, matrix(runif(60, max = 2, min = 0), 6, 10))
rownames(mat2) = paste0("R", 1:12)
colnames(mat2) = paste0("C", 1:10)
le = sample(letters[1:3], 12, replace = TRUE)
names(le) = paste0("R", 1:12)
mat1t = t(mat1)
mat2t = t(mat2)
######繪圖#######
ht1 <- Heatmap(mat1t, name = "rnorm", col = col_rnorm, row_km = 2,
left_annotation = rowAnnotation(foo1 = 1:10, bar1 = anno_barplot(1:10)))
ha <- HeatmapAnnotation(foo = anno_barplot(1:12, height = unit(2, "cm"),
axis_param = list(side = "right")))
ht2 <- Heatmap(mat2t, name = "runif", col = col_runif, row_km = 2,
left_annotation = rowAnnotation(foo2 = 1:10))
ht3 <- Heatmap(rbind(letters = le), name = "letters", col = col_letters)
ht_list <- ht1 %v% ha %v% ht2 %v% ht3
draw(ht_list, column_km = 2)

本次干貨分享,小編就heatmap(),pheatmap包, ComplexHeatmap包做了簡單的介紹。接下來對以上三種做一個簡單的匯總:
- heatmap()[R基本函數,統計數據包]:繪制一個簡單的熱圖
- pheatmap()[pheatmap R包]:繪制漂亮的熱圖,并提供更多控件來更改熱圖的外觀
- ComplexHeatmap[R/Bioconductor的包]:繪制注釋和排列復雜熱圖(用于基因組數據分析是非常有用的)
然而在R語言中還有更多熱圖的畫法,eg: heatmap.2(),d3heatmap()等,歡迎有興趣的小伙伴留言,和小編一起探索高級聚類熱圖的畫法。
