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 设置横向和纵向聚类热图的树形高度