热图用来对采集的因子响应强度或其他的一些因素进行归一化,从而利用颜色条的变化来直观地表示不同样本之间的变量变化情况。
其本质是有一个个用预设颜色表示数值大小的小方格组成的一个数据矩阵,并通过对因子或样本进行聚类,从而观察不同样品数据间的相似性。
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()等,欢迎有兴趣的小伙伴留言,和小编一起探索高级聚类热图的画法。