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

热图解释及pheatmap绘制热图

  • 一、热图绘制原理
    • 1.1 热图介绍
    • 1.2 热图绘制准备——均一化
    • 1.3 热图绘制方式
    • 1.4 热图数据查看示例
  • 二、pheatmap包简介
    • 2.1 pheatmap介绍
    • 2.2 pheatmap详细参数解释
    • 2.3 pheatmap安装及加载
  • 三、pheatmap包绘制热图示例
    • 3.1 数据准备
    • 3.2 数据导入及绘图
      • 3.2.1 数据导入及列名调整
      • 3.2.2 热图绘制
        • 3.2.2.1 基础热图及其标准化
        • 3.2.2.2 热图聚类及聚类树高和聚类热图划分隔断
        • 3.2.2.3 热图单元格显示参数设置
          • 3.2.2.3.1 热图单元格高度及宽度的设置
          • 3.2.2.3.2 热图单元格数值的显示
          • 3.2.2.3.3 热图单元格数值大小颜色等参数设置
        • 3.2.2.4 热图单元格区分标记
        • 3.2.2.5 热图美化
          • 3.2.2.5.1 标题及行列标签
          • 3.2.2.5.2 单元格边框及热图图例
          • 3.2.2.5.3 字体及标签角度
    • 3.3 特殊绘图——构建分组(注释功能)
      • 3.3.1 简单分组展示
      • 3.3.2 简单纵向分组列及颜色设置
      • 3.3.3 多参数——纵向分组列
      • 3.3.4 多参数——纵向分组列并修改分组颜色
    • 3.4 图片导出

一、热图绘制原理

1.1 热图介绍

通常情况下,热图用来对采集的因子响应强度或其他的一些因素进行归一化,从而利用颜色条的变化来直观地表示不同样本之间的含量变化情况。

其本质是由一个个用预设颜色表示数值大小的小方格组成的一个数据矩阵,并通过对因子或样本进行聚类,从而观察不同样品数据间的相似性。

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

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

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

详细的热图均一化及聚类参数解释可参考:
用R包中heatmap画热图

1.3 热图绘制方式

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

满足绘图需求的方式多种多样,关键是选取自己用的顺手,绘图效果满意的那一种并多加练习!

1.4 热图数据查看示例

  • 数据排布:横行为对应的化合物数据,纵轴对应的样本数据
    在这里插入图片描述
    图1 数据输入准备
  • 按行进行标准化,即对每个样本中的因子分别进行标准化,突出该因子在哪个样本中更占优势
    在这里插入图片描述
    图2 按行进行标准化
  • 按列进行标准化,即对每个化合物对应的样本进行标准化。
    在这里插入图片描述
    图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.
在这里插入图片描述
官方介绍:相对于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”格式。
在这里插入图片描述
图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)

在这里插入图片描述
图5 数据输入

列名调整代码:

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

在这里插入图片描述
图6 列名调整后数据

3.2.2 热图绘制

3.2.2.1 基础热图及其标准化

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

pheatmap(data1) #绘制基础热图

在这里插入图片描述
图7 基础热图

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

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

在这里插入图片描述
图8 标准化后热图

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

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

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

在这里插入图片描述
图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 # 设置热图单元格宽度和高度)

在这里插入图片描述
图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 # 热图上显示数值)

在这里插入图片描述
图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", #热图上数值的字体类型)

在这里插入图片描述
图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)))

在这里插入图片描述
图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)

在这里插入图片描述
图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) # 设置图例的范围)

在这里插入图片描述
图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, # 设置标签显示角度)

在这里插入图片描述
图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))))#创建分组列
row.names(annotation_col) = colnames(data1) #这一行必须有,否则会报错:Error in check.length("fill") :  'gpar' element 'fill' must not be length 0ann_colors = list(Sample = c(M1="#E889BD", M2="#B286D7", M3="#5189E0", M4="#0089CF", M5="#0081A1", M6="#007360", M7="#E889BD", M8="#B286D7", M9="#5189E0")) #定义分组颜色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, # 设置标签显示角度annotation_col = annotation_col, #显示样品列的分组信息及图例annotation_colors = ann_colors, #使用annotation_colors参数设定样品列分组的颜色#filename = "text.pdf" # 自动保存到设置路径下)

在这里插入图片描述
图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) #这一行必须有,否则会报错:Error in check.length("fill") :  'gpar' element 'fill' must not be length 0ann_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", #热图上数值的字体类型#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, # 设置标签显示角度annotation_col = annotation_col, #显示样品列的分组信息及图例annotation_colors = ann_color, #使用annotation_colors参数设定样品列分组的颜色#filename = "text.pdf" # 自动保存到设置路径下)

在这里插入图片描述
图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)))#创建纵向分组列
row.names(annotation_col) = colnames(data1) #这一行必须有,否则会报错:Error in check.length("fill") :  'gpar' element 'fill' must not be length 0pheatmap(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", #热图上数值的字体类型#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, # 设置标签显示角度annotation_col = annotation_cols, #显示样品列的分组信息及图例#filename = "text.pdf" # 自动保存到设置路径下)

在这里插入图片描述
图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) #这一行必须有,否则会报错:Error in check.length("fill") :  'gpar' element 'fill' must not be length 0ann_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", #热图上数值的字体类型#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, # 设置标签显示角度annotation_col = annotation_col, #显示样品列的分组信息及图例annotation_colors = ann_colors, #使用annotation_colors参数设定样品列分组的颜色#filename = "text.pdf" # 自动保存到设置路径下)

在这里插入图片描述
图20 多参数分组及颜色设置

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

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" # 自动保存到设置路径下)

在这里插入图片描述
图21 保存图片

以上为关于 “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,

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22295.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R | 可视化 | 热图(Heatmap)

1 基础绘制 R绘制热图时&#xff0c;数据需要输入一个矩阵&#xff0c;可以用as.matrix()把它转换成矩阵。这里利用R自带的数据集绘制热图。 > # 数据 > data <- as.matrix(mtcars) > > # 绘制热图 > heatmap(data) OUTPUT: 热图的每一列是一个变量&…

TeeChart绘制Gant图

软件安装 及使用 VS2010 使用TeeChart绘图控件 - 之一 - 控件和类的导入_尘中远的博客-CSDN博客_teechartVS2010 使用TeeChart绘图控件 - 之一 - 控件和类的导入VS2010 使用TeeChart绘图控件 - 之二 - 绘制图形&#xff08;折线图&#xff0c;柱状图&#xff09;TeeChart绘图控…

使用GraphInsight打造TuGraph可视化分析应用

图的可视化是分析和理解图数据的一种重要手段。TuGraph 内置了TuGraph Browser&#xff0c;为大多数用户提供了一个简单易用的图可视化界面。由于 TuGraph Browser 不支持自定义界面&#xff0c;因此一些有自定义界面需求的用户只能选择自行搭建新的前端界面。11月22日&#xf…

热图 -- pheatmap or ggplot2

文章目录 brief数据准备 pheatmap实例最朴素的方式数据缩放取消聚类更改每个小方格的大小聚类以及聚类方式和参数修改热图呈现的颜色修改legend ggplot2实例ggplot2实例变式添加 group bar做成dotplot pheatmap 多图组合问题 brief 这里主要记录了pheatmap 以及 ggplot2实现热…

GTK渲染摄像头图像数据

GTK渲染摄像头图像数据 1.GDK简介 绘图工具集(GDK&#xff0c;Graphics Drawing Kit)是在GTK 和特定操作系统的应用编程接口(API,Application Program Interface)之间的低级绘图制层—— Linux的API是Xlib。由于GTK和机器的API之间没有直接接口&#xff0c;移植GTK就成为移植G…

Pheatmap热图的绘制及如何调整图片

Pheatmap热图的绘制及如何调整图片 Pheatmap包是R语言绘制热图比较强大的软件包&#xff0c;当然现在也有很多资料介绍这个包的使用&#xff0c;但是今天我写的重点不是如何使用这个包绘制热图&#xff0c;而是如何绘制出更好看的热图。&#xff08;我使用的矩阵是1663x594&am…

unity可视化图表插件XCharts绘制折线图、饼图、柱状图

一、简介 一款基于UGUI的功能强大、易用、参数可配置的数据可视化图表插件。支持折线图、柱状图、饼图、雷达图、散点图、热力图等常见图表。 特性&#xff1a; 内置丰富示例和模板&#xff0c;参数可视化配置&#xff0c;效果实时预览&#xff0c;纯代码绘制。 支持折线图、柱…

日语学习软件推荐——五十音图APP:AI纠正你的日语发音

每个自学日语的人&#xff0c;想必都经历过“哑巴日语”的苦恼。收集了很多学习资料&#xff0c;努力积累词汇量&#xff0c;一开口却暴露了“散装口语”的短板。 但是现在就不怕这个问题啦&#xff0c;五十音图APP可以让你从入门开始&#xff0c;练就一口流利的地道日语&…

白痴学日语系列之初识日语(二)

每日记单词 間[あいだ]0 a i da 间&#xff0c;间隔 【记】あい&#xff08;合い→互相之间&#xff09;だ&#xff08;是&#xff09;→间隔 青[あお]1 a o 蓝色&#xff1b;青色&#xff1b;绿色&#xff1b;不成熟 【记】あ&#xff08;上&#xff09;お&#xff08;う→…

新标日语学习笔记

文章目录 新标日语学习笔记第一章 日语入门1.1 五十音1.2 日语声调1.2.1 声调理解1.2.2 高低音发音1.2.3 简单的高低音发音练习 1.3 浊音和长音1.3.1 浊音1.3.2 长音 1.4 促音和拗音 第二章 课文与笔记2.1 小李是中国人2.1.1 单词2.1.2 语法 新标日语学习笔记 第一章 日语入门…

日语语音识别_日语语音识别软件_日语语音识别在线 - 云+社区 - 腾讯云

广告关闭 腾讯云双11爆品提前享&#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高满返5000元&#xff01; 语气词过滤和句末标点过滤用户自主选择功能 新功能发布录音文件识别产品上线音视频领域模型 新功能发布…

C++制作一款小黑子键盘提示音程序

不好意思我漏出鸡脚了。 首先讲一下思路&#xff0c;这次制作的小黑子相当于键盘提示音&#xff0c;输入J,N,T,M&#xff0c;会发出“鸡你太美”的声音&#xff0c;连续按下JNTM则会发出“你干嘛啊&#xff0c;哎呦”的声音。 完整的工程和代码以及成品已经上传至百度网盘&…

只因小黑子:css动画复习

小黑子的css动画复习 css动画1. transiton 动画过渡1.1 transiton: 某属性1.2 transiton: all2. 动画过渡类型3. 动画过渡单一属性4. transform 2d属性4.1 translate 平移一、translateX(参数) 水平平移二、translateY(参数) 上下平移三、translate(a,b) 水平&#xff0c;上下平…

小黑子的HTML入土过程

小黑子的HTML入土过程 1. HTMLCSS系列教程第一章1.1 了解什么是HTML和CSS1.2 编译器VS Code1.2.1 下载方式和设置1.2.2 VS Code的快捷键基础用法 1.3 了解网页开发1.4 Web前端的三大核心技术1.5 HTML的基本结构和属性1.6 HTML的初始代码1.7 HTML的注释1.8 HTML的语义化1.9 标题…

Python画图之小黑子头像

效果演示 &#x1f438;真爱粉必备知识 倍速*2.0 实现步骤 设置窗口大小和绘画速度。用 penup() 和 goto() 来定位&#xff0c;画出领子和衣服&#xff0c;使用 fillcolor() 和 begin_fill() 开始填充颜色。用 pensize() 和 pencolor() 来调整线条的大小和颜色&#xff0c;画…

用 ChatGPT 秒建大模型,OpenAI 全新插件杀疯了,接入代码解释器一键 get

ChatGPT 可以联网后&#xff0c;OpenAI 还火速介绍了一款代码生成器&#xff0c;在这个插件的加持下&#xff0c;ChatGPT 甚至可以自己生成机器学习模型了。 上周五&#xff0c;OpenAI 刚刚宣布了惊爆的消息&#xff0c;ChatGPT 可以联网&#xff0c;接入第三方插件了&#xf…

什么是元宇宙,什么是AI,什么是chatgpt?什么是星云虚境?

随着现代科技的发展&#xff0c;元宇宙已经不再是科幻电影中的概念&#xff0c;而是逐渐变得真实起来。元宇宙是极为先进的数字世界&#xff0c;它需要人工智能、虚拟现实、区块链、云计算等多种技术的支持。在这个数字空间中&#xff0c;人们可以体验到比现实生活更丰富、更多…

元宇宙大爆炸:开发元宇宙是互联网的接替者?

美国游戏引擎公司Epic Games的创始人CEO蒂姆斯威尼&#xff08;Tim Sweeney&#xff09;宣称&#xff0c;玩家已经可以通过风靡的《堡垒之夜》聚集“元宇宙”的虚拟世界中。近期&#xff0c;美国超人气歌手Ariana Grande在全球不同地区&#xff0c;连续举办了5场演唱会&#xf…

“抢滩”元宇宙:不只Facebook和腾讯

来源 | 01区块链 责编 | Carol Facebook创始人兼首席执行官马克扎克伯格在2021年6月底表示&#xff0c;该公司的未来规划远不止是社交媒体&#xff0c;而是筑造一个元宇宙。扎克伯克宣称&#xff0c;希望在未来用5年左右的时间&#xff0c;将Facebook打造为一家元宇宙公司。 20…