R 数据可视化 —— 聚类热图 pheatmap

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R 数据可视化 —— 聚类热图 pheatmap相关的知识,希望对你有一定的参考价值。

参考技术A 在前面的章节中,我们介绍了如何使用 ggplot2 绘制热图

ggplot2 绘制热图的方式很多,如 geom_raster 、 geom_tile 等

但通常仅仅绘制热图是不够的,还需要对数据进行聚类,即绘制聚类热图。

例如,最常用的就是将差异基因的表达值绘制聚类热图,来查看基因在不同样本中的表达差异情况,或者比较不同聚类分组之间的差异。

绘制聚类热图的包有很多,我们主要介绍 pheatmap 和 ComplexHeatmap

假设我们有如下数据

要绘制简单的热图,可以使用内置的 heatmap 函数

更改颜色,并为列添加列样本的分类颜色条

内置函数提供的样式较少,无法对某些图形属性进行设置。

所以下面我们使用 pheatmap 包来绘制热图

pheatmap 对图形属性提供了更精细的控制

这样看起来怪怪的,应该是基因的表达量差异,所以对行进行标准化

嗯,一下子就顺眼多了,实验组和对照组的基因表达量差别明显

默认情况下,会对数据的行列分别进行层次聚类,如果我们想在进行层次聚类之前,先对行特征,也就是基因进行 k-means 聚类,我们可以

先将基因聚为 3 类,再进行层次聚类

如果只想对其中行列中的一个进行聚类,可以使用 cluster_rows 和 cluster_cols 参数,取消对行或列的距离

默认的距离度量为欧氏距离,也可以分别为行列指定不同的距离度量,例如

也可以使用 clustering_method 参数来指定不同的聚类方法,支持以下几种方法:

图例的设置很简单,即通过 legend_breaks 参数设置断点, legend_labels 参数设置断点处的标签

如果不想显示图例,直接设置 legend = F 就行

设置边框颜色

删除边框

默认情况下,单元格的长度和宽度会根据图片的大小自动调整,如果想固定单元格的大小,可以使用 cellwidth 和 cellheight 两个参数

如果我们想在单元格中显示对于的数值,可以设置 display_numbers = TRUE

对显示的数值进行格式化

或者,为 display_numbers 参数传递一个矩阵

例如,根据表达值是否大于 100 来显示不同的标记

在不对数据进行聚类的情况下,可以对行列进行自定义划分为不同的块

或者只对行或列进行分块

总之,只能对未聚类的行或列进行分块

或者,根据层次聚类的结果,对数据进行分块

使用 main 参数来设置图像的标题

可以使用 show_colnames 和 show_rownames 不显示标签

分别设置标签的大小,同时设置列标签的倾斜角度,可选的角度有 270、0、45、90、315

也可以使用 fontsize 参数统一行列标签的大小

也可以自定义行列标签

我们可以分别为行和列构建分组信息,例如对于行是基因,可以将其分为癌基因和抑癌基因等,而列为样本可以分为癌症和配对正常样本,同时样本对应的患者应该会有年龄性别等信息

例如

我们可以将这些信息以颜色条的方式添加到图中

隐藏图例

我们可以回去 pheatmap 函数返回的对象的信息

可以看到,返回对象 p 中包含 4 个变量,我们可以根据 tree_row 和 tree_col 提取出对应的行列顺序

提取这些信息有助于我们对数据进行分组,用于后续分析

参数列表

数据:
https://github.com/dxsbiocc/learn/blob/main/data/RPKM_DEG.csv

R包pheatmap:用参数一步步详细绘制热图

经常会想到用热图来展示某个基因或某些基因的表达量问题,今天用R中pheatmap包一步步绘制热图。

第一步:公众路径设置,调用包pheatmap,读取目的文件,查看文件。

 1 rm(list=ls())
 2 setwd("D:/VIP/ARSTUDYLOCATION/heatmap/heatmap/")
 3 getwd()
 4 
 5 library(pheatmap)
 6 library(ggplot2)
 7 
 8 data <- read.table("test.FPKM.txt",header=T,row.names=1,sep="	")
 9 dim(data)
10 head(data)

第二步:逐步深入绘制热图(图1-图15)

一建热图(图1)
p<-pheatmap(data)
设置标准化方向scale,对其横向标准化
p<-pheatmap(data,scale="row")
设置边框为白色,横向纵向聚类为无;border="white;cluster_cols = F;cluster_rows = F
p<-pheatmap(data,scale="row",border="white",cluster_cols = F,cluster_rows = F)

  技术图片

 

 

图1

 

去掉横纵坐标中的id;show_rownames = F,show_colnames = F(图2)
p<-pheatmap(data,scale="row",show_rownames = F,show_colnames = F,border="white",cluster_cols = F,cluster_rows = F)

  技术图片

 

 图2 去掉横轴和纵轴的名称

 

去掉右上角图例;legend = F(图3)
p<-pheatmap(data,scale="row",show_rownames = F,show_colnames = F,legend = F,border="white",cluster_cols = F,cluster_rows = F)

  技术图片

 

 图3 将右上角的图例去掉

 

设置右上角图例的范围;legend_breaks=c(-1,1)(图4)
p<-pheatmap(data,scale="row",legend_breaks=c(-1,0,1),show_rownames = F,show_colnames = F,legend = T,border="white",cluster_cols = F,cluster_rows = F)
p<-pheatmap(data,scale="row",legend_breaks=c(-2,0,2),show_rownames = F,show_colnames = F,legend = T,border="white",cluster_cols = F,cluster_rows = F)

  技术图片

 

 图4 更改图例范围

 

设置图中字的大小;fondsize(图5)
#图表字体:命令:fondsize=2/8
p<-pheatmap(data,scale="row",fontsize = 2,show_rownames = T,show_colnames = T,legend = F,border="white",cluster_cols = F,cluster_rows = F)
p2<-pheatmap(data,scale="row",fontsize = 8,show_rownames = T,show_colnames = T,legend = F,border="white",cluster_cols = F,cluster_rows = F)

  技术图片

 

 图5 设置字的大小

 

 

改变横向和纵向字体大小;fontsize_row = 8,fontsize_col=12 (图6)
p<-pheatmap(data,scale="row",fontsize_row = 8,fontsize_col = 12,show_rownames = T,show_colnames = T,legend=T,border="white",cluster_cols = T,cluster_rows = T)
p<-pheatmap(data,scale="row",fontsize_row = 12,fontsize_col = 8,show_rownames = T,show_colnames = T,legend=T,border="white",cluster_cols = T,cluster_rows = T)

  技术图片

 

 图6 改变横向和纵向字体的大小

 

设置横向纵向的树高;treeheight_col = 20,treeheight_row = 15(图7)
p<-pheatmap(data,scale="row",border="white",cluster_cols = T,treeheight_col = 20,cluster_rows = T,treeheight_row = 15)
p<-pheatmap(data,scale="row",border="white",cluster_cols = T,treeheight_col = 20,cluster_rows = T,treeheight_row = 20)

  技术图片

 

 图7 设置横向和纵向聚类热图的树形高度

 

以上是关于R 数据可视化 —— 聚类热图 pheatmap的主要内容,如果未能解决你的问题,请参考以下文章

用R包中heatmap画热图

R绘图pheatmap热图绘制——高阶篇

一起来学习如何使用R语言绘制热图

技术贴 | R语言:组学关联分析和pheatmap可视化

R包pheatmap:用参数一步步详细绘制热图

R包pheatmap:用参数一步步详细绘制热图