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

热图解释及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或FALSEcluster_cols表示仅对列聚类,值为TRUE或FALSEclustering_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或FALSElegend_breaks表示图例断点的设置,默认为NAlegend_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_rowlabels_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&#x9002;&#x7528;&#x4E8E;&#x8868;&#x5934;&#x5B58;&#x5728;&#x4E00;&#x4E9B;&#x7279;&#x6B8A;&#x5B57;&#x7B26;&#xFF08;&#xFF3F;&#x7B49;&#xFF09;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x907F;&#x514D;&#x8F93;&#x5165;R&#x540E;&#x4EA7;&#x751F;&#x9519;&#x8BEF;" < code></->

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

Error in hclust(d, method = method) : &#x5916;&#x63A5;&#x51FD;&#x6570;&#x8C03;&#x7528;&#x65F6;&#x4E0D;&#x80FD;&#x6709;NA/NaN/Inf(arg10)

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

列名调整代码:

rownames(data1) = data1[,1]&#x3000;&#x3000;&#x3000;#&#x7ED9;data1&#x6DFB;&#x52A0;&#x5217;&#x540D;
data1 <- data1[,-1]      #去除第一列的名称 data1 <- as.matrix(data1) < code></->

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

3.2.2 热图绘制

3.2.2.1 基础热图及其标准化

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

pheatmap(data1)&#x3000;#&#x7ED8;&#x5236;&#x57FA;&#x7840;&#x70ED;&#x56FE;

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

对行进行归一化化后绘图:

pheatmap(data1,
         scale = "row" # &#x6309;&#x884C;&#x5F52;&#x4E00;&#x5316;
         )

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

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

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

pheatmap(data1,
        scale = "row", # &#x6309;&#x884C;&#x5F52;&#x4E00;&#x5316;&#xFF0C;&#x67E5;&#x770B;&#x56E0;&#x5B50;&#x5728;&#x4E0D;&#x540C;&#x6837;&#x672C;&#x4E2D;&#x7684;&#x5206;&#x5E03;&#x60C5;&#x51B5;
        cluster_cols = FALSE, clustering_distance_rows = "correlation", #&#x53D6;&#x6D88;&#x5217;&#x805A;&#x7C7B;&#xFF0C;&#x8868;&#x793A;&#x884C;&#x805A;&#x7C7B;&#x4F7F;&#x7528;&#x76AE;&#x5C14;&#x68EE;&#x76F8;&#x5173;&#x7CFB;&#x6570;&#x805A;&#x7C7B;
        treeheight_row = 30, # &#x8BBE;&#x7F6E;&#x884C;&#x805A;&#x7C7B;&#x6811;&#x9AD8;
        cutree_rows =3 #&#x6839;&#x636E;&#x6837;&#x54C1;&#x5217;&#x805A;&#x7C7B;&#x60C5;&#x51B5;&#x5C06;&#x70ED;&#x56FE;&#x7684;&#x884C;&#x65B9;&#x5411;&#x9694;&#x5F00;&#x4E3A;3&#x4EFD;
         )

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

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

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

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

pheatmap(data1,
        scale = "row", # &#x6309;&#x884C;&#x5F52;&#x4E00;&#x5316;&#xFF0C;&#x67E5;&#x770B;&#x56E0;&#x5B50;&#x5728;&#x4E0D;&#x540C;&#x6837;&#x672C;&#x4E2D;&#x7684;&#x5206;&#x5E03;&#x60C5;&#x51B5;
        cluster_cols = FALSE, clustering_distance_rows = "correlation", #&#x53D6;&#x6D88;&#x5217;&#x805A;&#x7C7B;&#xFF0C;&#x8868;&#x793A;&#x884C;&#x805A;&#x7C7B;&#x4F7F;&#x7528;&#x76AE;&#x5C14;&#x68EE;&#x76F8;&#x5173;&#x7CFB;&#x6570;&#x805A;&#x7C7B;
        treeheight_row = 30, # &#x8BBE;&#x7F6E;&#x884C;&#x805A;&#x7C7B;&#x6811;&#x9AD8;
        cutree_rows =3, #&#x6839;&#x636E;&#x6837;&#x54C1;&#x5217;&#x805A;&#x7C7B;&#x60C5;&#x51B5;&#x5C06;&#x70ED;&#x56FE;&#x7684;&#x884C;&#x65B9;&#x5411;&#x9694;&#x5F00;&#x4E3A;3&#x4EFD;
        cellwidth = 40,cellheight = 15 # &#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x5355;&#x5143;&#x683C;&#x5BBD;&#x5EA6;&#x548C;&#x9AD8;&#x5EA6;
        )

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

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

pheatmap(data1,
        scale = "row", # &#x6309;&#x884C;&#x5F52;&#x4E00;&#x5316;&#xFF0C;&#x67E5;&#x770B;&#x56E0;&#x5B50;&#x5728;&#x4E0D;&#x540C;&#x6837;&#x672C;&#x4E2D;&#x7684;&#x5206;&#x5E03;&#x60C5;&#x51B5;
        cluster_cols = FALSE, clustering_distance_rows = "correlation", #&#x53D6;&#x6D88;&#x5217;&#x805A;&#x7C7B;&#xFF0C;&#x8868;&#x793A;&#x884C;&#x805A;&#x7C7B;&#x4F7F;&#x7528;&#x76AE;&#x5C14;&#x68EE;&#x76F8;&#x5173;&#x7CFB;&#x6570;&#x805A;&#x7C7B;
        treeheight_row = 30, # &#x8BBE;&#x7F6E;&#x884C;&#x805A;&#x7C7B;&#x6811;&#x9AD8;
        cutree_rows =3, #&#x6839;&#x636E;&#x6837;&#x54C1;&#x5217;&#x805A;&#x7C7B;&#x60C5;&#x51B5;&#x5C06;&#x70ED;&#x56FE;&#x7684;&#x884C;&#x65B9;&#x5411;&#x9694;&#x5F00;&#x4E3A;3&#x4EFD;
        cellwidth = 40,cellheight = 15, # &#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x5355;&#x5143;&#x683C;&#x5BBD;&#x5EA6;&#x548C;&#x9AD8;&#x5EA6;
        display_numbers = T # &#x70ED;&#x56FE;&#x4E0A;&#x663E;&#x793A;&#x6570;&#x503C;
        )

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

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

pheatmap(data1,
        scale = "row", # &#x6309;&#x884C;&#x5F52;&#x4E00;&#x5316;&#xFF0C;&#x67E5;&#x770B;&#x56E0;&#x5B50;&#x5728;&#x4E0D;&#x540C;&#x6837;&#x672C;&#x4E2D;&#x7684;&#x5206;&#x5E03;&#x60C5;&#x51B5;
        cluster_cols = FALSE, clustering_distance_rows = "correlation", #&#x53D6;&#x6D88;&#x5217;&#x805A;&#x7C7B;&#xFF0C;&#x8868;&#x793A;&#x884C;&#x805A;&#x7C7B;&#x4F7F;&#x7528;&#x76AE;&#x5C14;&#x68EE;&#x76F8;&#x5173;&#x7CFB;&#x6570;&#x805A;&#x7C7B;
        treeheight_row = 30, # &#x8BBE;&#x7F6E;&#x884C;&#x805A;&#x7C7B;&#x6811;&#x9AD8;
        cutree_rows =3, #&#x6839;&#x636E;&#x6837;&#x54C1;&#x5217;&#x805A;&#x7C7B;&#x60C5;&#x51B5;&#x5C06;&#x70ED;&#x56FE;&#x7684;&#x884C;&#x65B9;&#x5411;&#x9694;&#x5F00;&#x4E3A;3&#x4EFD;
        cellwidth = 40,cellheight = 15, # &#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x5355;&#x5143;&#x683C;&#x5BBD;&#x5EA6;&#x548C;&#x9AD8;&#x5EA6;
        display_numbers = T, # &#x70ED;&#x56FE;&#x4E0A;&#x663E;&#x793A;&#x6570;&#x503C;
        fontsize_number = 8, #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
        number_color="blue", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x989C;&#x8272;
        number_format="%.1e", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x7C7B;&#x578B;
        )

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

3.2.2.4 热图单元格区分标记

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

pheatmap(data1,
        scale = "row", # &#x6309;&#x884C;&#x5F52;&#x4E00;&#x5316;&#xFF0C;&#x67E5;&#x770B;&#x56E0;&#x5B50;&#x5728;&#x4E0D;&#x540C;&#x6837;&#x672C;&#x4E2D;&#x7684;&#x5206;&#x5E03;&#x60C5;&#x51B5;
        cluster_cols = FALSE, clustering_distance_rows = "correlation", #&#x53D6;&#x6D88;&#x5217;&#x805A;&#x7C7B;&#xFF0C;&#x8868;&#x793A;&#x884C;&#x805A;&#x7C7B;&#x4F7F;&#x7528;&#x76AE;&#x5C14;&#x68EE;&#x76F8;&#x5173;&#x7CFB;&#x6570;&#x805A;&#x7C7B;
        treeheight_row = 30, # &#x8BBE;&#x7F6E;&#x884C;&#x805A;&#x7C7B;&#x6811;&#x9AD8;
        cutree_rows =3, #&#x6839;&#x636E;&#x6837;&#x54C1;&#x5217;&#x805A;&#x7C7B;&#x60C5;&#x51B5;&#x5C06;&#x70ED;&#x56FE;&#x7684;&#x884C;&#x65B9;&#x5411;&#x9694;&#x5F00;&#x4E3A;3&#x4EFD;
        cellwidth = 40,cellheight = 15, # &#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x5355;&#x5143;&#x683C;&#x5BBD;&#x5EA6;&#x548C;&#x9AD8;&#x5EA6;
        fontsize_number = 8, #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
        number_color="blue", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x989C;&#x8272;
        number_format="%.1e", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x7C7B;&#x578B;
        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", # &#x6309;&#x884C;&#x5F52;&#x4E00;&#x5316;&#xFF0C;&#x67E5;&#x770B;&#x56E0;&#x5B50;&#x5728;&#x4E0D;&#x540C;&#x6837;&#x672C;&#x4E2D;&#x7684;&#x5206;&#x5E03;&#x60C5;&#x51B5;
        cluster_cols = FALSE, clustering_distance_rows = "correlation", #&#x53D6;&#x6D88;&#x5217;&#x805A;&#x7C7B;&#xFF0C;&#x8868;&#x793A;&#x884C;&#x805A;&#x7C7B;&#x4F7F;&#x7528;&#x76AE;&#x5C14;&#x68EE;&#x76F8;&#x5173;&#x7CFB;&#x6570;&#x805A;&#x7C7B;
        treeheight_row = 30, # &#x8BBE;&#x7F6E;&#x884C;&#x805A;&#x7C7B;&#x6811;&#x9AD8;
        cutree_rows =3, #&#x6839;&#x636E;&#x6837;&#x54C1;&#x5217;&#x805A;&#x7C7B;&#x60C5;&#x51B5;&#x5C06;&#x70ED;&#x56FE;&#x7684;&#x884C;&#x65B9;&#x5411;&#x9694;&#x5F00;&#x4E3A;3&#x4EFD;
        cellwidth = 40,cellheight = 15, # &#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x5355;&#x5143;&#x683C;&#x5BBD;&#x5EA6;&#x548C;&#x9AD8;&#x5EA6;
        fontsize_number = 8, #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
        number_color="blue", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x989C;&#x8272;
        number_format="%.1e", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x7C7B;&#x578B;
        display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1)), #&#x70ED;&#x56FE;&#x533A;&#x5757;&#x6807;&#x8BB0;
        show_colnames = FALSE, # &#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x7684;&#x663E;&#x793A;
        show_rownames = FALSE
        )

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

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

pheatmap(data1,
          scale = "row", # &#x6309;&#x884C;&#x5F52;&#x4E00;&#x5316;&#xFF0C;&#x67E5;&#x770B;&#x56E0;&#x5B50;&#x5728;&#x4E0D;&#x540C;&#x6837;&#x672C;&#x4E2D;&#x7684;&#x5206;&#x5E03;&#x60C5;&#x51B5;
          cluster_cols = FALSE, clustering_distance_rows = "correlation", #&#x53D6;&#x6D88;&#x5217;&#x805A;&#x7C7B;&#xFF0C;&#x8868;&#x793A;&#x884C;&#x805A;&#x7C7B;&#x4F7F;&#x7528;&#x76AE;&#x5C14;&#x68EE;&#x76F8;&#x5173;&#x7CFB;&#x6570;&#x805A;&#x7C7B;
          treeheight_row = 30, # &#x8BBE;&#x7F6E;&#x884C;&#x805A;&#x7C7B;&#x6811;&#x9AD8;
          cutree_rows =3, #&#x6839;&#x636E;&#x6837;&#x54C1;&#x5217;&#x805A;&#x7C7B;&#x60C5;&#x51B5;&#x5C06;&#x70ED;&#x56FE;&#x7684;&#x884C;&#x65B9;&#x5411;&#x9694;&#x5F00;&#x4E3A;3&#x4EFD;
          cellwidth = 40,cellheight = 15, # &#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x65B9;&#x5757;&#x5BBD;&#x5EA6;&#x548C;&#x9AD8;&#x5EA6;
         fontsize_number = 8, #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
         number_color="blue", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x989C;&#x8272;
         number_format="%.1e", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x7C7B;&#x578B;
         display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1)), #&#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x533A;&#x5206;&#x6807;&#x8BB0;
         main="Test", # &#x8BBE;&#x7F6E;&#x56FE;&#x5F62;&#x6807;&#x9898;
         show_colnames = FALSE, # &#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x7684;&#x663E;&#x793A;
         show_rownames = FALSE,
         border="white", # &#x8BBE;&#x7F6E;&#x8FB9;&#x6846;&#x4E3A;&#x767D;&#x8272;
        legend = T, # FALSE&#x53BB;&#x9664;&#x56FE;&#x4F8B;; T&#x663E;&#x793A;&#x56FE;&#x4F8B;
        legend_breaks=c(-2.5,0,2.5) # &#x8BBE;&#x7F6E;&#x56FE;&#x4F8B;&#x7684;&#x8303;&#x56F4;
         )

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

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

pheatmap(data1,
          scale = "row", # &#x6309;&#x884C;&#x5F52;&#x4E00;&#x5316;&#xFF0C;&#x67E5;&#x770B;&#x56E0;&#x5B50;&#x5728;&#x4E0D;&#x540C;&#x6837;&#x672C;&#x4E2D;&#x7684;&#x5206;&#x5E03;&#x60C5;&#x51B5;
          cluster_cols = FALSE, clustering_distance_rows = "correlation", #&#x53D6;&#x6D88;&#x5217;&#x805A;&#x7C7B;&#xFF0C;&#x8868;&#x793A;&#x884C;&#x805A;&#x7C7B;&#x4F7F;&#x7528;&#x76AE;&#x5C14;&#x68EE;&#x76F8;&#x5173;&#x7CFB;&#x6570;&#x805A;&#x7C7B;
          treeheight_row = 30, # &#x8BBE;&#x7F6E;&#x884C;&#x805A;&#x7C7B;&#x6811;&#x9AD8;
          cutree_rows =3, #&#x6839;&#x636E;&#x6837;&#x54C1;&#x5217;&#x805A;&#x7C7B;&#x60C5;&#x51B5;&#x5C06;&#x70ED;&#x56FE;&#x7684;&#x884C;&#x65B9;&#x5411;&#x9694;&#x5F00;&#x4E3A;3&#x4EFD;
          cellwidth = 40,cellheight = 15, # &#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x65B9;&#x5757;&#x5BBD;&#x5EA6;&#x548C;&#x9AD8;&#x5EA6;
         fontsize_number = 8, #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
         number_color="blue", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x989C;&#x8272;
         number_format="%.1e", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x7C7B;&#x578B;
         display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1)), #&#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x533A;&#x5206;&#x6807;&#x8BB0;
         main="Test", # &#x8BBE;&#x7F6E;&#x56FE;&#x5F62;&#x6807;&#x9898;
         show_colnames = T, # &#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x7684;&#x663E;&#x793A;
         show_rownames = T,
         border="white", # &#x8BBE;&#x7F6E;&#x8FB9;&#x6846;&#x4E3A;&#x767D;&#x8272;
         legend = T, # FALSE&#x53BB;&#x9664;&#x56FE;&#x4F8B;; T&#x663E;&#x793A;&#x56FE;&#x4F8B;
         legend_breaks=c(-2.5,0,2.5), # &#x8BBE;&#x7F6E;&#x56FE;&#x4F8B;&#x7684;&#x8303;&#x56F4;
         fontsize_row = 10, # &#x5206;&#x522B;&#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
         fontsize_col = 10,
         angle_col = 45, # &#x8BBE;&#x7F6E;&#x6807;&#x7B7E;&#x663E;&#x793A;&#x89D2;&#x5EA6;
         )

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

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

在以上介绍中,只是基于 “pheatmap” 这个包的各项参数来修改绘图参数和展示方式,当需要同时在热图上显示分组情况时,可通过 构建分组信息,从而以不同的颜色等方式来展现。

3.3.1 简单分组展示

按照下面代码,首先创建分组列,并定义分组的颜色,绘图结果如图17所示。

annotation_col = data.frame(Sample=factor(c(rep("M1",1),rep("M2",1),rep("M3",1),rep("M4",1),rep("M5",1),rep("M6",1),rep("M7",1),rep("M8",1),rep("M9",1))))#&#x521B;&#x5EFA;&#x5206;&#x7EC4;&#x5217;
row.names(annotation_col) = colnames(data1) #&#x8FD9;&#x4E00;&#x884C;&#x5FC5;&#x987B;&#x6709;&#xFF0C;&#x5426;&#x5219;&#x4F1A;&#x62A5;&#x9519;&#xFF1A;Error in check.length("fill") :  'gpar' element 'fill' must not be length 0

ann_colors = list(Sample = c(M1="#E889BD", M2="#B286D7", M3="#5189E0", M4="#0089CF", M5="#0081A1", M6="#007360", M7="#E889BD", M8="#B286D7", M9="#5189E0")) #&#x5B9A;&#x4E49;&#x5206;&#x7EC4;&#x989C;&#x8272;

pheatmap(data1,
         scale = "row", # &#x6309;&#x884C;&#x5F52;&#x4E00;&#x5316;&#xFF0C;&#x67E5;&#x770B;&#x56E0;&#x5B50;&#x5728;&#x4E0D;&#x540C;&#x6837;&#x672C;&#x4E2D;&#x7684;&#x5206;&#x5E03;&#x60C5;&#x51B5;
         cluster_cols = FALSE, clustering_distance_rows = "correlation", #&#x53D6;&#x6D88;&#x5217;&#x805A;&#x7C7B;&#xFF0C;&#x8868;&#x793A;&#x884C;&#x805A;&#x7C7B;&#x4F7F;&#x7528;&#x76AE;&#x5C14;&#x68EE;&#x76F8;&#x5173;&#x7CFB;&#x6570;&#x805A;&#x7C7B;
         treeheight_row = 30, # &#x8BBE;&#x7F6E;&#x884C;&#x805A;&#x7C7B;&#x6811;&#x9AD8;
         cutree_rows =3, #&#x6839;&#x636E;&#x6837;&#x54C1;&#x5217;&#x805A;&#x7C7B;&#x60C5;&#x51B5;&#x5C06;&#x70ED;&#x56FE;&#x7684;&#x884C;&#x65B9;&#x5411;&#x9694;&#x5F00;&#x4E3A;3&#x4EFD;
         cellwidth = 40,cellheight = 15, # &#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x65B9;&#x5757;&#x5BBD;&#x5EA6;&#x548C;&#x9AD8;&#x5EA6;
         #display_numbers = T, # &#x70ED;&#x56FE;&#x4E0A;&#x663E;&#x793A;&#x6570;&#x503C;
         fontsize_number = 8, #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
         number_color="blue", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x989C;&#x8272;
         number_format="%.1e", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x7C7B;&#x578B;
         #display_numbers = matrix(ifelse(data1 > 2, "+", "-"), nrow(data1))
         display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1)), #&#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x533A;&#x5206;&#x6807;&#x8BB0;
         main="Test", # &#x8BBE;&#x7F6E;&#x56FE;&#x5F62;&#x6807;&#x9898;
         show_colnames = T, # &#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x7684;&#x663E;&#x793A;
         show_rownames = T,
         border="white", # &#x8BBE;&#x7F6E;&#x8FB9;&#x6846;&#x4E3A;&#x767D;&#x8272;
         legend = T, # FALSE&#x53BB;&#x9664;&#x56FE;&#x4F8B;; T&#x663E;&#x793A;&#x56FE;&#x4F8B;
         legend_breaks=c(-2.5,0,2.5), # &#x8BBE;&#x7F6E;&#x56FE;&#x4F8B;&#x7684;&#x8303;&#x56F4;
         fontsize_row = 10, # &#x5206;&#x522B;&#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
         fontsize_col = 10,
         angle_col = 45, # &#x8BBE;&#x7F6E;&#x6807;&#x7B7E;&#x663E;&#x793A;&#x89D2;&#x5EA6;
         annotation_col = annotation_col, #&#x663E;&#x793A;&#x6837;&#x54C1;&#x5217;&#x7684;&#x5206;&#x7EC4;&#x4FE1;&#x606F;&#x53CA;&#x56FE;&#x4F8B;
         annotation_colors = ann_colors, #&#x4F7F;&#x7528;annotation_colors&#x53C2;&#x6570;&#x8BBE;&#x5B9A;&#x6837;&#x54C1;&#x5217;&#x5206;&#x7EC4;&#x7684;&#x989C;&#x8272;
         #filename = "text.pdf" # &#x81EA;&#x52A8;&#x4FDD;&#x5B58;&#x5230;&#x8BBE;&#x7F6E;&#x8DEF;&#x5F84;&#x4E0B;
         )

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图17 简单分组列展示

3.3.2 简单纵向分组列及颜色设置

当每个样品分组包含多个样品列,并设置分组颜色时,按如下代码,结果如图18所示。

annotation_col = data.frame(Sample=factor(c(rep("group1",3),rep("group2",3),rep("group3",3))))
row.names(annotation_col) = colnames(data1) #&#x8FD9;&#x4E00;&#x884C;&#x5FC5;&#x987B;&#x6709;&#xFF0C;&#x5426;&#x5219;&#x4F1A;&#x62A5;&#x9519;&#xFF1A;Error in check.length("fill") :  'gpar' element 'fill' must not be length 0

ann_color <- list(a<-c(group1="blue" , group2="red" group3="green" )) pheatmap(data1, scale="row" # 按行归一化,查看因子在不同样本中的分布情况 cluster_cols="FALSE," clustering_distance_rows="correlation" #取消列聚类,表示行聚类使用皮尔森相关系数聚类 treeheight_row="30," 设置行聚类树高 cutree_rows="3," #根据样品列聚类情况将热图的行方向隔开为3份 cellwidth="38,cellheight" = 15, 设置热图方块宽度和高度 #display_numbers="T," 热图上显示数值 fontsize_number="8," #热图上数值的字体大小 number_color="blue" #热图上数值的字体颜色 number_format="%.1e" #热图上数值的字体类型> 2, "+", "-"), nrow(data1))
         display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1)), #&#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x533A;&#x5206;&#x6807;&#x8BB0;
         main="Test", # &#x8BBE;&#x7F6E;&#x56FE;&#x5F62;&#x6807;&#x9898;
         show_colnames = T, # &#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x7684;&#x663E;&#x793A;
         show_rownames = T,
         border="white", # &#x8BBE;&#x7F6E;&#x8FB9;&#x6846;&#x4E3A;&#x767D;&#x8272;
         legend = T, # FALSE&#x53BB;&#x9664;&#x56FE;&#x4F8B;; T&#x663E;&#x793A;&#x56FE;&#x4F8B;
         legend_breaks=c(-2.5,0,2.5), # &#x8BBE;&#x7F6E;&#x56FE;&#x4F8B;&#x7684;&#x8303;&#x56F4;
         fontsize_row = 10, # &#x5206;&#x522B;&#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
         fontsize_col = 10,
         angle_col = 45, # &#x8BBE;&#x7F6E;&#x6807;&#x7B7E;&#x663E;&#x793A;&#x89D2;&#x5EA6;
         annotation_col = annotation_col, #&#x663E;&#x793A;&#x6837;&#x54C1;&#x5217;&#x7684;&#x5206;&#x7EC4;&#x4FE1;&#x606F;&#x53CA;&#x56FE;&#x4F8B;
         annotation_colors = ann_color, #&#x4F7F;&#x7528;annotation_colors&#x53C2;&#x6570;&#x8BBE;&#x5B9A;&#x6837;&#x54C1;&#x5217;&#x5206;&#x7EC4;&#x7684;&#x989C;&#x8272;
         #filename = "text.pdf" # &#x81EA;&#x52A8;&#x4FDD;&#x5B58;&#x5230;&#x8BBE;&#x7F6E;&#x8DEF;&#x5F84;&#x4E0B;
         )
</->

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图18 分组展示并修改颜色

3.3.3 多参数——纵向分组列

以本例数据进行参考说明,sample 1-9 共9列样品,其中每3列划分为1组,构建分组信息(包含3个处理,分别是:group1 (sample1-3)、group2 (sample4-6)和group3 (sample7-9)),以及对应的采样时间:Time1, Time2, Time3。,绘图结果如图19所示。

annotation_cols = data.frame(Sample=factor(rep(c("group1","group2","group3"),3)), Time=factor(rep(c("March","July","December"),3)))#&#x521B;&#x5EFA;&#x7EB5;&#x5411;&#x5206;&#x7EC4;&#x5217;
row.names(annotation_col) = colnames(data1) #&#x8FD9;&#x4E00;&#x884C;&#x5FC5;&#x987B;&#x6709;&#xFF0C;&#x5426;&#x5219;&#x4F1A;&#x62A5;&#x9519;&#xFF1A;Error in check.length("fill") :  'gpar' element 'fill' must not be length 0

pheatmap(data1,
         scale = "row", # &#x6309;&#x884C;&#x5F52;&#x4E00;&#x5316;&#xFF0C;&#x67E5;&#x770B;&#x56E0;&#x5B50;&#x5728;&#x4E0D;&#x540C;&#x6837;&#x672C;&#x4E2D;&#x7684;&#x5206;&#x5E03;&#x60C5;&#x51B5;
         cluster_cols = FALSE, clustering_distance_rows = "correlation", #&#x53D6;&#x6D88;&#x5217;&#x805A;&#x7C7B;&#xFF0C;&#x8868;&#x793A;&#x884C;&#x805A;&#x7C7B;&#x4F7F;&#x7528;&#x76AE;&#x5C14;&#x68EE;&#x76F8;&#x5173;&#x7CFB;&#x6570;&#x805A;&#x7C7B;
         treeheight_row = 30, # &#x8BBE;&#x7F6E;&#x884C;&#x805A;&#x7C7B;&#x6811;&#x9AD8;
         cutree_rows =3, #&#x6839;&#x636E;&#x6837;&#x54C1;&#x5217;&#x805A;&#x7C7B;&#x60C5;&#x51B5;&#x5C06;&#x70ED;&#x56FE;&#x7684;&#x884C;&#x65B9;&#x5411;&#x9694;&#x5F00;&#x4E3A;3&#x4EFD;
         cellwidth = 38,cellheight = 15, # &#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x65B9;&#x5757;&#x5BBD;&#x5EA6;&#x548C;&#x9AD8;&#x5EA6;
         #display_numbers = T, # &#x70ED;&#x56FE;&#x4E0A;&#x663E;&#x793A;&#x6570;&#x503C;
         fontsize_number = 8, #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
         number_color="blue", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x989C;&#x8272;
         number_format="%.1e", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x7C7B;&#x578B;
         #display_numbers = matrix(ifelse(data1 > 2, "+", "-"), nrow(data1))
         display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1)), #&#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x533A;&#x5206;&#x6807;&#x8BB0;
         main="Test", # &#x8BBE;&#x7F6E;&#x56FE;&#x5F62;&#x6807;&#x9898;
         show_colnames = T, # &#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x7684;&#x663E;&#x793A;
         show_rownames = T,
         border="white", # &#x8BBE;&#x7F6E;&#x8FB9;&#x6846;&#x4E3A;&#x767D;&#x8272;
         legend = T, # FALSE&#x53BB;&#x9664;&#x56FE;&#x4F8B;; T&#x663E;&#x793A;&#x56FE;&#x4F8B;
         legend_breaks=c(-2.5,0,2.5), # &#x8BBE;&#x7F6E;&#x56FE;&#x4F8B;&#x7684;&#x8303;&#x56F4;
         fontsize_row = 10, # &#x5206;&#x522B;&#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
         fontsize_col = 10,
         angle_col = 45, # &#x8BBE;&#x7F6E;&#x6807;&#x7B7E;&#x663E;&#x793A;&#x89D2;&#x5EA6;
         annotation_col = annotation_cols, #&#x663E;&#x793A;&#x6837;&#x54C1;&#x5217;&#x7684;&#x5206;&#x7EC4;&#x4FE1;&#x606F;&#x53CA;&#x56FE;&#x4F8B;
         #filename = "text.pdf" # &#x81EA;&#x52A8;&#x4FDD;&#x5B58;&#x5230;&#x8BBE;&#x7F6E;&#x8DEF;&#x5F84;&#x4E0B;
         )

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

3.3.4 多参数——纵向分组列并修改分组颜色

如图19所示,分组会按默认的颜色进行显示,当需要 设定具体的分组颜色时,可按下代码进行,如图20所示。

annotation_col = data.frame(Sample=factor(rep(c("group1","group2","group3"),3)),Time=factor(rep(c("March","July","December"),3)))
row.names(annotation_col) = colnames(data1) #&#x8FD9;&#x4E00;&#x884C;&#x5FC5;&#x987B;&#x6709;&#xFF0C;&#x5426;&#x5219;&#x4F1A;&#x62A5;&#x9519;&#xFF1A;Error in check.length("fill") :  'gpar' element 'fill' must not be length 0

ann_colors <- list( sample="c(group1" = "blue", group2="red" , group3="green" ), time="c(March" "orange", july="purple" december="yellow" ) pheatmap(data1, scale="row" # 按行归一化,查看因子在不同样本中的分布情况 cluster_cols="FALSE," clustering_distance_rows="correlation" #取消列聚类,表示行聚类使用皮尔森相关系数聚类 treeheight_row="30," 设置行聚类树高 cutree_rows="3," #根据样品列聚类情况将热图的行方向隔开为3份 cellwidth="38,cellheight" 15, 设置热图方块宽度和高度 #display_numbers="T," 热图上显示数值 fontsize_number="8," #热图上数值的字体大小 number_color="blue" #热图上数值的字体颜色 number_format="%.1e" #热图上数值的字体类型> 2, "+", "-"), nrow(data1))
         display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1)), #&#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x533A;&#x5206;&#x6807;&#x8BB0;
         main="Test", # &#x8BBE;&#x7F6E;&#x56FE;&#x5F62;&#x6807;&#x9898;
         show_colnames = T, # &#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x7684;&#x663E;&#x793A;
         show_rownames = T,
         border="white", # &#x8BBE;&#x7F6E;&#x8FB9;&#x6846;&#x4E3A;&#x767D;&#x8272;
         legend = T, # FALSE&#x53BB;&#x9664;&#x56FE;&#x4F8B;; T&#x663E;&#x793A;&#x56FE;&#x4F8B;
         legend_breaks=c(-2.5,0,2.5), # &#x8BBE;&#x7F6E;&#x56FE;&#x4F8B;&#x7684;&#x8303;&#x56F4;
         fontsize_row = 10, # &#x5206;&#x522B;&#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
         fontsize_col = 10,
         angle_col = 45, # &#x8BBE;&#x7F6E;&#x6807;&#x7B7E;&#x663E;&#x793A;&#x89D2;&#x5EA6;
         annotation_col = annotation_col, #&#x663E;&#x793A;&#x6837;&#x54C1;&#x5217;&#x7684;&#x5206;&#x7EC4;&#x4FE1;&#x606F;&#x53CA;&#x56FE;&#x4F8B;
         annotation_colors = ann_colors, #&#x4F7F;&#x7528;annotation_colors&#x53C2;&#x6570;&#x8BBE;&#x5B9A;&#x6837;&#x54C1;&#x5217;&#x5206;&#x7EC4;&#x7684;&#x989C;&#x8272;
         #filename = "text.pdf" # &#x81EA;&#x52A8;&#x4FDD;&#x5B58;&#x5230;&#x8BBE;&#x7F6E;&#x8DEF;&#x5F84;&#x4E0B;
         )
</->

R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)
图20 多参数分组及颜色设置

基于以上四组分组创建情况,可利用 ” annotation_row“添加横向分组,并设置颜色。

3.4 图片导出

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

pheatmap(data1,
         scale = "row", # &#x6309;&#x884C;&#x5F52;&#x4E00;&#x5316;&#xFF0C;&#x67E5;&#x770B;&#x56E0;&#x5B50;&#x5728;&#x4E0D;&#x540C;&#x6837;&#x672C;&#x4E2D;&#x7684;&#x5206;&#x5E03;&#x60C5;&#x51B5;
         cluster_cols = FALSE, clustering_distance_rows = "correlation", #&#x53D6;&#x6D88;&#x5217;&#x805A;&#x7C7B;&#xFF0C;&#x8868;&#x793A;&#x884C;&#x805A;&#x7C7B;&#x4F7F;&#x7528;&#x76AE;&#x5C14;&#x68EE;&#x76F8;&#x5173;&#x7CFB;&#x6570;&#x805A;&#x7C7B;
         treeheight_row = 30, # &#x8BBE;&#x7F6E;&#x884C;&#x805A;&#x7C7B;&#x6811;&#x9AD8;
         cutree_rows =3, #&#x6839;&#x636E;&#x6837;&#x54C1;&#x5217;&#x805A;&#x7C7B;&#x60C5;&#x51B5;&#x5C06;&#x70ED;&#x56FE;&#x7684;&#x884C;&#x65B9;&#x5411;&#x9694;&#x5F00;&#x4E3A;3&#x4EFD;
         cellwidth = 40,cellheight = 15, # &#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x65B9;&#x5757;&#x5BBD;&#x5EA6;&#x548C;&#x9AD8;&#x5EA6;
         #display_numbers = T, # &#x70ED;&#x56FE;&#x4E0A;&#x663E;&#x793A;&#x6570;&#x503C;
         fontsize_number = 8, #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
         number_color="blue", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x989C;&#x8272;
         number_format="%.1e", #&#x70ED;&#x56FE;&#x4E0A;&#x6570;&#x503C;&#x7684;&#x5B57;&#x4F53;&#x7C7B;&#x578B;
         #display_numbers = matrix(ifelse(data1 > 2, "+", "-"), nrow(data1))
         display_numbers = matrix(ifelse(data1 > 5000, "***", ""), nrow(data1)), #&#x8BBE;&#x7F6E;&#x70ED;&#x56FE;&#x533A;&#x5206;&#x6807;&#x8BB0;
         main="Test", # &#x8BBE;&#x7F6E;&#x56FE;&#x5F62;&#x6807;&#x9898;
         show_colnames = T, # &#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x7684;&#x663E;&#x793A;
         show_rownames = T,
         border="white", # &#x8BBE;&#x7F6E;&#x8FB9;&#x6846;&#x4E3A;&#x767D;&#x8272;
         legend = T, # FALSE&#x53BB;&#x9664;&#x56FE;&#x4F8B;; T&#x663E;&#x793A;&#x56FE;&#x4F8B;
         legend_breaks=c(-2.5,0,2.5), # &#x8BBE;&#x7F6E;&#x56FE;&#x4F8B;&#x7684;&#x8303;&#x56F4;
         fontsize_row = 10, # &#x5206;&#x522B;&#x8BBE;&#x7F6E;&#x884C;&#x5217;&#x6807;&#x7B7E;&#x5B57;&#x4F53;&#x5927;&#x5C0F;
         fontsize_col = 10,
         angle_col = 45, # &#x8BBE;&#x7F6E;&#x6807;&#x7B7E;&#x663E;&#x793A;&#x89D2;&#x5EA6;
         filename = "text.pdf" # &#x81EA;&#x52A8;&#x4FDD;&#x5B58;&#x5230;&#x8BBE;&#x7F6E;&#x8DEF;&#x5F84;&#x4E0B;
         )

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

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

报错内容:

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

ann_color <- list(a<-c(dry="yellow" , wet="firebrick" )) < code></->

正确的书写方式:

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,

关于分组的报错内容可参考:Error in convert_annotations(annotation_col, annotation_colors) :
Factor levels on variable Time do not match with annotation_colors

其他参考内容:
R语言绘制热图实践(一)pheatmap包
超详细的热图绘制教程(5000余字),真正的保姆级教程
pheatmap热图技巧合集
pheatmap()条件分组中的故障以及其他混淆点

Original: https://blog.csdn.net/qq_43210428/article/details/120020284
Author: 跳动的喵尾巴
Title: R:热图解释 | pheatmap包参数及详细聚类图绘制流程(一篇解决热图绘制问题)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/614847/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球