实用干货 | 代谢组学中层次聚类热图的R语言实现-pheatmap( )函数

在代谢组学的数据分析中,通常根据代谢物的含量进行层次聚类分析,以反映各个样本之间代谢物含量的差异。
常用的数据分析工具中,R语言中的程序包可以灵活绘制出非常美观的层次聚类热图形。本文将利用R语言中的pheatmap包对绘制层次聚类热图进行详细的介绍(详细参数见文末彩蛋!)。
一、pheatmap( )函数常用参数简介
pheatmap(mat, # 热图的输入数据,数据类型为数值型data.frame或matrix
color = colorRampPalette(rev(brewer.pal(n = 7, name = "RdYlBu")))(100), # 热图颜色设置
cellwidth = NA, # 设置热图单元格的宽度
cellheight = NA, # 设置热图单元格的高度
treeheight_row = ifelse((class(cluster_rows) == "hclust") || cluster_rows, 50, 0), # 设置行聚类树的高度
treeheight_col = ifelse((class(cluster_cols) == "hclust") || cluster_cols, 50, 0), # 设置列聚类树的高度
cluster_rows = TRUE, # 是否对行进行聚类
cluster_cols = TRUE, # 是否对列进行聚类
cutree_rows = NA, # 设置将行聚类的结果分割成多少个集群,分割依据时基于层次聚类结果,如果未对行进行聚类,则该参数被直接忽略
cutree_cols = NA, # 设置将列聚类的结果分割成多少个集群,分割依据时基于层次聚类结果
annotation_row = NA, # 在热图左侧添加注释,可用于显示代谢物的分类信息,数据为data.frame格式
annotation_col = NA, # 在热图顶部添加注释,可用于显示分组信息,数据为data.frame类型
border_color = "grey60", # 热图内部单元格的边界颜色,可设置为NA无边界
display_numbers = F, # 是否在热图单元格中显示相应的数值
fontsize = 10, # 基础字体大小设置
fontsize_row = fontsize, # 行名字体大小设置
fontsize_col = fontsize, # 列名字体大小设置
filename = NA, # 保存热图的全文件路径,包含路径和输出的热图文件名(当设置了filename时,图形显示器将不再显示热图
…)
二、pheatmap( )函数绘制热图实战
第一步:安装所需的R包及原始数据导入
install.packages("openxlsx") # 导入excel数据所需的R包
install.packages("pheatmap") # 绘制热图所需的R包
library(openxlsx)
library(pheatmap)
data <- read.xlsx(‘E: /R_TEST.xlsx’) # 导入数据(案例中的数据非真实数据)
rownames(data) <- data[, 1] # 设置行名

第二步:基础热图-默认参数
pheatmap(data[, c(3:8)])

第三步:设置颜色
pheatmap(data[, c(3:8)], color = colorRampPalette(c('red', 'white', 'blue'))(100))
# 其中('red', 'white', 'blue')和(100)可根据需求自行修改

第四步:设置单元格大小
pheatmap(data[, c(3:8)], cellwidth = 18, cellheight = 18)

第五步:设置聚类树的高度
pheatmap(data[, c(3:8)], treeheight_row = 100)
# 设置行(代谢物)聚类树的高度
pheatmap(data[, c(3:8)], treeheight_col = 100)
# 设置列(样本)聚类树的高度


第六步:取消聚类
pheatmap(data[, c(3:8)], cluster_rows = FALSE)
# 取消行聚类
pheatmap(data[, c(3:8)], cluster_cols = FALSE)
# 取消列聚类


第七步:依据聚类结果对热图进行分割
pheatmap(data[, c(3:8)], cluster_rows = TRUE, cluster_cols = FALSE, cutree_rows = 3)
# cutree_rows = 3 是根据聚类结果进行的具体值设置

第八步:添加样本分组信息
annotation_col = data.frame(Group = factor(rep(c('A','B'), c(3,3))), row.names = colnames(data[, c(3:8)]))
# 对每个样本设置相对于的分组,(A、B为组名,3为每个组的样本数)
注意:原始数据表中每个分组的样本放在一起,否则factor( )需一一对应样本名设置相对应的分组名。
pheatmap(data[, c(3:8)], cluster_rows = TRUE, cluster_cols = FALSE, cutree_rows = 3, annotation_col = annotation_col)

第九步:添加代谢物分类信息
annotation_row = data.frame(Class = data$Class, row.names = rownames(data))
pheatmap(data[, c(3:8)], cluster_rows = TRUE, cluster_cols = FALSE, cutree_rows = 3, annotation_col = annotation_col, annotation_row = annotation_row)

第十步:设置单元格边框颜色,默认颜色为灰色(grey30)
pheatmap(data[, c(3:8)], cluster_rows = TRUE, cluster_cols = FALSE, cutree_rows = 3, annotation_col = annotation_col, annotation_row = annotation_row, border_color = NA)
# border_color = NA 表示不设置单元格边框颜色

第十一步:单元格内显示数值
pheatmap(data[, c(3:8)], cluster_rows = TRUE, cluster_cols = FALSE, cutree_rows = 3, annotation_col = annotation_col, annotation_row = annotation_row, border_color = NA, display_numbers = T)

第十二步:设置字体大小
pheatmap(data[, c(3:8)], cluster_rows = TRUE, cluster_cols = FALSE, cutree_rows = 3, annotation_col = annotation_col, annotation_row = annotation_row, border_color = NA, display_numbers = T, fontsize = 11)
也可使用fontsize_row和fontsize_col分别对行标签和列标签进行字体大小设置。
pheatmap(data[, c(3:8)], cluster_rows = TRUE, cluster_cols = FALSE, cutree_rows = 3, annotation_col = annotation_col, annotation_row = annotation_row, border_color = NA, display_numbers = T, fontsize = 11, fontsize_row = 13, fontsize_col = 15)

第十三步:保存热图
pheatmap(data[, c(3:8)], cluster_rows = TRUE, cluster_cols = FALSE, cutree_rows = 3, annotation_col = annotation_col, annotation_row = annotation_row, border_color = NA, display_numbers = T, filename = 'E:/R_TEST.png')
# filename为保存路径和文件名
注意:设置filename后,RStudio图形界面将不再显示出热图。
彩蛋:pheatmap( )函数的参数详解
网盘下载链接:
https://pan.baidu.com/s/1ao690Lpk2upH57_pu5AElw
提取码:98e4
最后编辑于 2022-10-09 · 浏览 1012