R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)

一、热图绘制原理

1.1 热图介绍

通常,热图用于对采集到的因子响应强度或其他一些因子进行归一化处理,从而利用颜色条的变化来直观地表示不同样本之间的内容变化。

其本质是一个由预设颜色代表数值的小方块组成的数据矩阵,通过对因子或样本进行聚类,可以观察到不同样本数据之间的相似性。

1.2 热图绘制准备——均一化

在绘制热图之前,通常会对数据进行归一化处理,使响应差异较大的因素处于同一数量级,以便于观察不同样本间不同因素的变化规律。

一般来说,一个因子在不同样本间的分布会在热图的行方向上进行展示,所以为了展示一个因子在不同样本间的分布,均一化处理会按 “row”进行。

详细的热图归一化和聚类参数说明,请参考:
用R包中heatmap画热图

1.3 热图绘制方式

常用的绘图软件:origin,excel,Tbtools,GraphPadPrism
在线绘图:metaboanalyst,云图图,Hiplot
R包绘制热图:pheatmap,heatmap,corrplot,complexHeatmap

有多种方法可以满足绘图需求。关键是要选自己舒服的,画出自己满意的效果,多练习!

1.4 热图数据查看示例

  • 数据排列:横行对应复合数据,纵轴对应样本数据
    R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
    图1 数据输入准备
  • 按行规范化
    ,即对每个样本中的因子分别进行标准化,
    突出显示该因素在哪个样本中更占主导地位
    R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
    图2 按行进行标准化
  • 按列标准化
    ,即对每个化合物对应的样本进行归一化。
    R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
    图3 按列进行标准化

二、pheatmap包简介

2.1 pheatmap介绍

pheatmap:A function to draw clustered heatmaps where one has better control over some graphical parameters such as cell size, etc.
R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
官方介绍:想对于heatmap包,pheatmap是图形绘制及参数修改更美观更严谨的一个热图包。

2.2 pheatmap详细参数解释

R中pheatmap包的参数内容如下:

pheatmap(mat, color = colorRampPalette(rev(brewer.pal(n = 7, name =
  "RdYlBu")))(100), kmeans_k = NA, breaks = NA, border_color = "grey60",
  cellwidth = NA, cellheight = NA, scale = "none", cluster_rows = TRUE,
  cluster_cols = TRUE, clustering_distance_rows = "euclidean",
  clustering_distance_cols = "euclidean", clustering_method = "complete",
  clustering_callback = identity2, cutree_rows = NA, cutree_cols = NA,
  treeheight_row = ifelse((class(cluster_rows) == "hclust") || cluster_rows,
  50, 0), treeheight_col = ifelse((class(cluster_cols) == "hclust") ||
  cluster_cols, 50, 0), legend = TRUE, legend_breaks = NA,
  legend_labels = NA, annotation_row = NA, annotation_col = NA,
  annotation = NA, annotation_colors = NA, annotation_legend = TRUE,
  annotation_names_row = TRUE, annotation_names_col = TRUE,
  drop_levels = TRUE, show_rownames = T, show_colnames = T, main = NA,
  fontsize = 10, fontsize_row = fontsize, fontsize_col = fontsize,
  angle_col = c("270", "0", "45", "90", "315"), display_numbers = F,
  number_format = "%.2f", number_color = "grey30", fontsize_number = 0.8
  * fontsize, gaps_row = NULL, gaps_col = NULL, labels_row = NULL,
  labels_col = NULL, filename = NA, width = NA, height = NA,
  silent = FALSE, na_col = "#DDDDDD", ...)

参数说明:

mat用于绘制热图的数据集
color表示热图颜色,colorRampPalette(rev(brewer.pal(n = 7, name = “RdYlBu”)))(100)表示颜色渐变调色板,“n” 的数量取决于调色板中颜色的数量,“name” 为调色板的名称,(100)表示100个等级;color = colorRampPalette(c(“blue”, “white”, “red”))(100)则是通过设置三种不同的颜色进行渐变显示
scale表示进行均一化的方向,值为 “row”, “column” 或者”none”
kmeans_k默认为NA,即不会对行进行聚类;如果想在进行层次聚类之前,先对行特征(因子)进行 k-means 聚类,则可在此调整热图的行聚类数
cluster_rows表示仅对行聚类,值为TRUE或FALSE
cluster_cols表示仅对列聚类,值为TRUE或FALSE
clustering_distance_rows表示行聚类使用的度量方法,默认为欧式距离“euclidean”,也可选用其他度量方法,如可选用 “correlation”表示按照 Pearson correlation方法进行聚类
clustering_distance_cols表示列聚类使用的度量方法,与行聚类的度量方法一致
clustering_method表示聚类方法,包括:‘ward’, ‘ward.D’, ‘ward.D2’, ‘single’, ‘complete’, ‘average’, ‘mcquitty’, ‘median’, ‘centroid’
clustering_callback修饰聚类的回调函数,默认为 “identity2”
cutree_rows若进行了行聚类,根据行聚类数量分隔热图行
cutree_cols若进行了列聚类,根据列聚类数量分隔热图列
treeheight_row若进行了行聚类,其热图行的聚类树高度,默认为 “50”
treeheight_col若进行了列聚类,其热图列的聚类树高度,默认为 “50”
breaks用来定义数值和颜色的对应关系,默认为 “NA”
border_color表示热图每个小的单元格边框的颜色,默认为 “NA”
cellwidth表示单个单元格的宽度,默认为 “NA”,即根据窗口自动调整
cellheight表示单个单元格的高度,默认为 “NA”,即根据窗口自动调整
fontsize表示热图中字体大小
fontsize_row表示行名字体大小,默认与fontsize一致
fontsize_col表示列名字体大小,默认与fontsize一致
fontsize_number表示热图上显示数字的字体大小
angle_col表示列标签的角度,可选择 “0”,“45”,“90”,“270”,“315”
display_numbers表示是否在单元格上显示原始数值或按照特殊条件进行区分标记
number_format表示热图单元格上显示的数据格式,如 “%.2f” 表示两位小数; “%.1e” 表示科学计数法
number_color表示热图单元格上显示的数据字体颜色
legend表示是否显示图例,值为TRUE或FALSE
legend_breaks表示图例断点的设置,默认为NA
legend_labels表示图例断点的标签
annotation_row表示是否对行进行注释
annotation_col表示是否对列进行注释
annotation_colors表示行注释及列注释的颜色
annotation_legend表示是否显示注释的图例信息
annotation_names_row表示是否显示行注释的名称
annotation_names_col表示是否显示列注释的名称
show_rownames表示是否显示行名
show_colnames表示是否显示列名
main表示热图的标题名字
gaps_row仅在未进行行聚类时使用,表示在行方向上热图的隔断位置,如 gaps_row = c(2, 4)表示在第2与第4列进行隔断
gaps_col仅在未进行列聚类时使用,表示在列方向上热图的隔断位置,同 gaps_row
labels_row表示使用行标签代替行名
labels_col表示使用列标签代替列名
filename表示保存图片的位置及命名
width表示输出绘制热图的宽度
height表示输出绘制热图的高度
silent表示不绘制热图
margins表示热图距画布的空白距离

笔记:

  1. colorRampPalette()需要调用R包** RColorBrewer_colors **,包括 “Blues BuGn BuPu GnBu Greens Grays Oranges OrRd PuBu PuBuGn PuRd Purples RdPu Reds YlGn YlGnBu YlOrBr YlOrRd” 连续调色板;
  2. 标准化解释;
  3. kmeans_k聚类解释;
  4. “annotation_row”与”annotation_col”对行列进行注释时,要求数据格式为数据框,并且绘制热图时需要考虑设置颜色值的类型(连续值或离散值);
  5. 参数说明参考;

2.3 pheatmap安装及加载

通过以下代码安装并加载R包。

install.packages("pheatmap") # 安装包
install.packages("xlsx") # 安装包
library(pheatmap)  #加载包
library(xlsx)  #加载包

三、pheatmap包绘制热图示例

3.1 数据准备

随机准备的数据如图 4 所示,其中水平行代表样本,列代表因素。
存储为 “.xlsx”格式。
R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图4 数据准备

3.2 数据导入及绘图

3.2.1 数据导入及列名调整

按照以下代码输入数据,并赋给 “data1”:

# 数据导入
data1 <- read.xlsx("D:\\**自己的路径**\\R\\sample data.xlsx", sheetIndex = 1, check.names = F, encoding="UTF-8")

# sheetIndex表示选择.xlsx文件中的第1个sheet,可用于多个sheet的表格数据选择;check.names = F适用于表头存在一些特殊字符(_等)的情况,避免输入R后产生错误

数据输入后如图5所示,需要将第一列的列名位置进行调换,否则会因为 “NA” 而报错,报错内容如下:

Error in hclust(d, method = method) : 外接函数调用时不能有NA/NaN/Inf(arg10)

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图5 数据输入

列名调整代码:

rownames(data1) = data1[,1]   #给data1添加列名
data1 <- data1[,-1]      #去除第一列的名称
data1 <- as.matrix(data1)

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图6 列名调整后数据

3.2.2 热图绘制

3.2.2.1 基础热图及其标准化

使用以下代码绘制基本热图:

pheatmap(data1) #绘制基础热图

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图7 基础热图

在规范化行之后绘制:

pheatmap(data1, 
         scale = "row" # 按行归一化
         )

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图8 标准化后热图

3.2.2.2 热图聚类及聚类树高和聚类热图划分隔断

按行选择“correlation”方法进行聚类绘图,并设置聚类高度以及按行隔断热图:

pheatmap(data1, 
        scale = "row", # 按行归一化,查看因子在不同样本中的分布情况
        cluster_cols = FALSE, clustering_distance_rows = "correlation", #取消列聚类,表示行聚类使用皮尔森相关系数聚类
        treeheight_row = 30, # 设置行聚类树高
        cutree_rows =3 #根据样品列聚类情况将热图的行方向隔开为3份
         )

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图9 聚类并调整参数后的热图

3.2.2.3 热图单元格显示参数设置

3.2.2.3.1 热图单元格高度及宽度的设置

利用“cellwidth” 与 “cellheight”设置热图单元格的宽度和高度:

pheatmap(data1, 
        scale = "row", # 按行归一化,查看因子在不同样本中的分布情况
        cluster_cols = FALSE, clustering_distance_rows = "correlation", #取消列聚类,表示行聚类使用皮尔森相关系数聚类
        treeheight_row = 30, # 设置行聚类树高
        cutree_rows =3, #根据样品列聚类情况将热图的行方向隔开为3份
        cellwidth = 40,cellheight = 15 # 设置热图单元格宽度和高度
        )

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图10 设置单元格宽度与高度之后的热图

3.2.2.3.2 热图单元格数值的显示

使用“display_numbers”参数设定是否在单元格上显示数值。

pheatmap(data1, 
        scale = "row", # 按行归一化,查看因子在不同样本中的分布情况
        cluster_cols = FALSE, clustering_distance_rows = "correlation", #取消列聚类,表示行聚类使用皮尔森相关系数聚类
        treeheight_row = 30, # 设置行聚类树高
        cutree_rows =3, #根据样品列聚类情况将热图的行方向隔开为3份
        cellwidth = 40,cellheight = 15, # 设置热图单元格宽度和高度
        display_numbers = T # 热图上显示数值
        )

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图11 设置热图单元格显示数据

3.2.2.3.3 热图单元格数值大小颜色等参数设置

使用“fontsize_number”、“number_color”、“number_format”等参数设置热图单元格上数值的大小及颜色等。

pheatmap(data1, 
        scale = "row", # 按行归一化,查看因子在不同样本中的分布情况
        cluster_cols = FALSE, clustering_distance_rows = "correlation", #取消列聚类,表示行聚类使用皮尔森相关系数聚类
        treeheight_row = 30, # 设置行聚类树高
        cutree_rows =3, #根据样品列聚类情况将热图的行方向隔开为3份
        cellwidth = 40,cellheight = 15, # 设置热图单元格宽度和高度
        display_numbers = T, # 热图上显示数值
        fontsize_number = 8, #热图上数值的字体大小
        number_color="blue", #热图上数值的字体颜色
        number_format="%.1e", #热图上数值的字体类型
        )

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图12 设置热图单元格显示数据的大小,颜色及类型

3.2.2.4 热图单元格区分标记

同样是使用 “display_numbers” 根据热图单元格的数值进行标记,若该单元格原始数值大于5000,则为 “***”,否则为 ” “:

pheatmap(data1, 
        scale = "row", # 按行归一化,查看因子在不同样本中的分布情况
        cluster_cols = FALSE, clustering_distance_rows = "correlation", #取消列聚类,表示行聚类使用皮尔森相关系数聚类
        treeheight_row = 30, # 设置行聚类树高
        cutree_rows =3, #根据样品列聚类情况将热图的行方向隔开为3份
        cellwidth = 40,cellheight = 15, # 设置热图单元格宽度和高度
        fontsize_number = 8, #热图上数值的字体大小
        number_color="blue", #热图上数值的字体颜色
        number_format="%.1e", #热图上数值的字体类型
        display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1))
        )

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图13 设置热图单元格区分标记

3.2.2.5 热图美化

3.2.2.5.1 标题及行列标签

使用“main”,“show_colnames”,“show_rownames”添加标题及设置标签的显示:

pheatmap(data1, 
        scale = "row", # 按行归一化,查看因子在不同样本中的分布情况
        cluster_cols = FALSE, clustering_distance_rows = "correlation", #取消列聚类,表示行聚类使用皮尔森相关系数聚类
        treeheight_row = 30, # 设置行聚类树高
        cutree_rows =3, #根据样品列聚类情况将热图的行方向隔开为3份
        cellwidth = 40,cellheight = 15, # 设置热图单元格宽度和高度
        fontsize_number = 8, #热图上数值的字体大小
        number_color="blue", #热图上数值的字体颜色
        number_format="%.1e", #热图上数值的字体类型
        display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1)), #热图区块标记
        show_colnames = FALSE, # 设置行列标签的显示
        show_rownames = FALSE
        )

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图14 设置热图标题及行列标签的显示

3.2.2.5.2 单元格边框及热图图例

使用“border” 与 “legend”设置热图单元格边框颜色及是否显示图例:

pheatmap(data1, 
          scale = "row", # 按行归一化,查看因子在不同样本中的分布情况
          cluster_cols = FALSE, clustering_distance_rows = "correlation", #取消列聚类,表示行聚类使用皮尔森相关系数聚类
          treeheight_row = 30, # 设置行聚类树高
          cutree_rows =3, #根据样品列聚类情况将热图的行方向隔开为3份
          cellwidth = 40,cellheight = 15, # 设置热图方块宽度和高度
         fontsize_number = 8, #热图上数值的字体大小
         number_color="blue", #热图上数值的字体颜色
         number_format="%.1e", #热图上数值的字体类型
         display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1)), #设置热图区分标记
         main="Test", # 设置图形标题
         show_colnames = FALSE, # 设置行列标签的显示
         show_rownames = FALSE,
         border="white", # 设置边框为白色
        legend = T, # FALSE去除图例; T显示图例
        legend_breaks=c(-2.5,0,2.5) # 设置图例的范围
         )

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图15 设置热图单元格边框及图例的显示

3.2.2.5.3 字体及标签角度

使用“angle_col”设置标签的显示角度;
使用“fondsize”可以同一设置热图中字体的大小;
使用“fontsize_row” 与 “fontsize_row”可以分别设置行列标签字体的大小:

pheatmap(data1, 
          scale = "row", # 按行归一化,查看因子在不同样本中的分布情况
          cluster_cols = FALSE, clustering_distance_rows = "correlation", #取消列聚类,表示行聚类使用皮尔森相关系数聚类
          treeheight_row = 30, # 设置行聚类树高
          cutree_rows =3, #根据样品列聚类情况将热图的行方向隔开为3份
          cellwidth = 40,cellheight = 15, # 设置热图方块宽度和高度
         fontsize_number = 8, #热图上数值的字体大小
         number_color="blue", #热图上数值的字体颜色
         number_format="%.1e", #热图上数值的字体类型
         display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1)), #设置热图区分标记
         main="Test", # 设置图形标题
         show_colnames = T, # 设置行列标签的显示
         show_rownames = T,
         border="white", # 设置边框为白色
         legend = T, # FALSE去除图例; T显示图例
         legend_breaks=c(-2.5,0,2.5), # 设置图例的范围
         fontsize_row = 10, # 分别设置行列标签字体大小
         fontsize_col = 10,
         angle_col = 45, # 设置标签显示角度
         )

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图16 设置热图字体及标签显示角度

3.3 特殊绘图——构建分组(注释功能)

这一段单独拿出来,可以进一步辅助绘制热图,从而直观的表达需要的信息,以后有时间再补充。

3.4 图片导出

保存格式包括pdf/jpeg/png格式,通过改变后缀的形式实现;
建议保存为pdf/jpeg格式,因为二者清晰度较高;
笔者喜欢pdf格式,便于利用AI等软件进行修饰。

pheatmap(data1, 
         scale = "row", # 按行归一化,查看因子在不同样本中的分布情况
         cluster_cols = FALSE, clustering_distance_rows = "correlation", #取消列聚类,表示行聚类使用皮尔森相关系数聚类
         treeheight_row = 30, # 设置行聚类树高
         cutree_rows =3, #根据样品列聚类情况将热图的行方向隔开为3份
         cellwidth = 40,cellheight = 15, # 设置热图方块宽度和高度
         #display_numbers = T, # 热图上显示数值
         fontsize_number = 8, #热图上数值的字体大小
         number_color="blue", #热图上数值的字体颜色
         number_format="%.1e", #热图上数值的字体类型
         #display_numbers = matrix(ifelse(data1 > 2, "+", "-"), nrow(data1))
         display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1)), #设置热图区分标记
         main="Test", # 设置图形标题
         show_colnames = T, # 设置行列标签的显示
         show_rownames = T,
         border="white", # 设置边框为白色
         legend = T, # FALSE去除图例; T显示图例
         legend_breaks=c(-2.5,0,2.5), # 设置图例的范围
         fontsize_row = 10, # 分别设置行列标签字体大小
         fontsize_col = 10,
         angle_col = 45, # 设置标签显示角度
         filename = "text.pdf" # 自动保存到设置路径下
         )

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图17 保存图片

以上为关于 “pheatmap” 整理的全部内容,希望对大家有所帮助!

错误内容:

使用下列方式输入代码命名颜色时,利用pheatmap包是不会变更颜色的。

ann_color <- list(a<-c(DRY="yellow", WET="firebrick"))

正确的书写方式

ann_colors = list(Sample = c(M1="#E889BD", M2="#B286D7", M3="#5189E0", M4="#0089CF", M5="#0081A1", M6="#007360" ))

使用以下代码时,只有行可以划分为3部分,而列不能,大概是因为未对列进行聚类,使用gaps_col可对为聚类列进行隔断显示。

cutree_rows=3,
cutree_cols=6,
gaps_col = 3,

R语言绘制热图实践(一)pheatmap包
超详细的热图绘制教程(5000余字),真正的保姆级教程

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(2)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年3月28日 下午12:14
下一篇 2022年3月28日 下午12:32

相关推荐