热图是一种常用的数据可视化方法,它可以清晰地展示数据在不同条件下的变化情况。而pheatmap是一个R语言中用于绘制热图的包,它可以绘制美观、清晰的热图,是数据科学家和图形分析师的常用工具之一。本文将从以下几个方面详细介绍如何使用pheatmap制作高质量热图。
一、pheatmap的基本用法
pheatmap最基本的函数是pheatmap(),常用的参数有以下几个:
- data:需要制作热图的数据,必填参数。
- scale:是否对数据进行标准化处理,可以是行、列或整张图片。如果设为“row”,表示按行标准化;同理,设为“column”表示按列标准化。如果想将整张图片标准化,则设为“none”。默认为“row”,即对每一行进行标准化处理。
- colorRampPalette:用于指定颜色条中使用的颜色序列。例如,colorRampPalette(c("white","blue"))可以生成一个从白色到蓝色的渐变色条。
- cluster_rows/cluster_cols: 是否需要进行层次聚类,可以设为“TRUE”或“FALSE”。如果设为“TRUE”,则对行/列进行层次聚类;反之则不进行层次聚类。
- fontsize_row / fontsize_col:行/列标签的字体大小,默认为12。
下面是一个pheatmap的最基本示例:
library(pheatmap) data(mtcars) # pheatmap自带的一份数据集 pheatmap(mtcars)
运行以上代码,可以得到一张基本的热图,如下图所示:
二、自定义热图外观
1、修改颜色条
颜色条是热图中的重要组成部分,可以用来展示不同数值的取值范围。pheatmap包中可以通过colorRampPalette()函数自定义颜色条的颜色序列。例如,在默认的渐变色条中间添加白色,可以使用以下代码:
data(mtcars) pheatmap(mtcars, colorRampPalette = c(colorRampPalette(c("navy","white")), colorRampPalette(c("white","firebrick"))))
运行以上代码,可以得到如下的热图:
2、修改行列标签
通过fontsize_row和fontsize_col参数,可以控制行列标签的字体大小。实例如下:
data(mtcars) pheatmap(mtcars,fontsize_row = 10,fontsize_col = 8)
运行以上代码,可以得到如下的热图:
可以看到,行列标签的字体大小分别为10和8。
3、修改图像尺寸
使用cellwidth和cellheight参数可以修改热图中单元格的大小,从而改变整张热图的大小。例如,使用以下代码可以将热图的宽度和高度均设为500px:
data(mtcars) pheatmap(mtcars, cellwidth = 20, cellheight = 20)
运行以上代码,可以得到如下的热图:
三、进阶用法
1、使用pheatmap函数内部的数据转换函数
使用pheatmap函数内部的数据转换函数,可以将数据处理成适合绘制热图的形式。常用的数据转换函数有:
- center_scale:标准化处理。对数据进行中心化和缩放,使每个特征的均值为0,方差为1。
- log2:对数据进行取对数操作,通常用于RNA-seq等高量表达数据的处理。
- discretize:将数据离散化。例如,可以将连续的百分比数据分为0-25%、25%-50%等多个离散化的区间。
- convert_to_binary:将数据转化为二元值。例如,可以将表达量高于某个阈值的基因标记为1,其他标记为0。
下面是一个用center_scale函数对mtcars数据进行标准化的示例:
data(mtcars) pheatmap(center_scale(mtcars))
运行以上代码,可以得到如下的热图:
2、使用自定义的聚类算法
在pheatmap中,可以使用row_cluster和col_cluster参数来控制是否进行行/列聚类,但是默认的聚类方法是基于欧几里得距离的层次聚类。如果希望使用自定义的聚类算法,可以使用pheatmap函数的breaks参数。
下面是一个使用kmeans排序法进行聚类的例子:
library(NbClust) # 加载用于聚类的NbClust 包 data(mtcars) dist_mat <- dist(mtcars) # 生成距离矩阵 km_clust <- NbClust(mtcars, distance = "euclidean", min.nc=2, max.nc=10, method="kmeans") clust_labels <- cbind(km_clust$Best.partition) pheatmap(mtcars,breaks = c(0,sort(clust_labels[order(clust_labels)]),nrow(mtcars)), cluster_rows = FALSE, cluster_cols = FALSE)
运行以上代码,可以得到如下的热图:
3、使用ggplot2中的ggplot函数进一步美化热图
pheatmap函数绘制的热图已经非常美观,但有时根据自己的需求,需要进行更多的细节控制。幸运的是,pheatmap包是基于ggplot2的,使用ggplot2的函数可以进一步美化pheatmap绘制出来的热图。
例如,可以使用ggplot2中的scale_fill_gradient()函数控制颜色条中使用的颜色序列:
library(ggplot2) data(mtcars) mat <- center_scale(mtcars) # 数据标准化处理 df = as.data.frame(mat) # 将数据转换为数据框形式,方便使用ggplot2函数 ggplot(df,aes(x = Col,y = Row,fill = Value)) + geom_tile() + scale_fill_gradient(low = "white", high = "steelblue")
运行以上代码,可以得到如下的热图:
结语
pheatmap是一款功能强大、易于使用的热图制作工具,它可以绘制出美观、清晰的热图。通过本文所述的基本用法、自定义热图外观的方法以及进阶用法,相信大家已经了解了pheatmap的基本操作,可以根据自己的需求进行深入的研究和使用。