您的位置:

如何使用pheatmap制作高质量热图

热图是一种常用的数据可视化方法,它可以清晰地展示数据在不同条件下的变化情况。而pheatmap是一个R语言中用于绘制热图的包,它可以绘制美观、清晰的热图,是数据科学家和图形分析师的常用工具之一。本文将从以下几个方面详细介绍如何使用pheatmap制作高质量热图。

一、pheatmap的基本用法

pheatmap最基本的函数是pheatmap(),常用的参数有以下几个:

  1. data:需要制作热图的数据,必填参数。
  2. scale:是否对数据进行标准化处理,可以是行、列或整张图片。如果设为“row”,表示按行标准化;同理,设为“column”表示按列标准化。如果想将整张图片标准化,则设为“none”。默认为“row”,即对每一行进行标准化处理。
  3. colorRampPalette:用于指定颜色条中使用的颜色序列。例如,colorRampPalette(c("white","blue"))可以生成一个从白色到蓝色的渐变色条。
  4. cluster_rows/cluster_cols: 是否需要进行层次聚类,可以设为“TRUE”或“FALSE”。如果设为“TRUE”,则对行/列进行层次聚类;反之则不进行层次聚类。
  5. 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函数内部的数据转换函数,可以将数据处理成适合绘制热图的形式。常用的数据转换函数有:

  1. center_scale:标准化处理。对数据进行中心化和缩放,使每个特征的均值为0,方差为1。
  2. log2:对数据进行取对数操作,通常用于RNA-seq等高量表达数据的处理。
  3. discretize:将数据离散化。例如,可以将连续的百分比数据分为0-25%、25%-50%等多个离散化的区间。
  4. 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的基本操作,可以根据自己的需求进行深入的研究和使用。

如何使用pheatmap制作高质量热图

2023-05-16
pheatmap热图代码详解

2023-05-20
深入了解R语言pheatmap绘图

2023-05-22
印象笔记记录java学习(Java成长笔记)

2022-11-12
java方法整理笔记(java总结)

2022-11-08
java笔记,大学java笔记

2022-11-28
5000元笔记本电脑

随着科技的不断发展,笔记本电脑已经成为了现代人生活中必不可少的工具。 随着科技的不断发展,笔记本电脑已经成为人们生活中必不可少的工具。在如今数字化时代的到来,人们对信息的需求也越来越高了,而笔记本作为

2023-12-08
java笔记,尚硅谷java笔记

2022-12-01
python基础学习整理笔记,Python课堂笔记

2022-11-21
笔记本电脑散热器声音很大怎么办

2023-05-23
java学习笔记(java初学笔记)

2022-11-14
Mac笔记:在日常生活中高效实用的笔记工具

2023-05-18
js代码热更(js热更新)

本文目录一览: 1、前端开发未来的发展前景怎么样? 2、如何实现iOS热更新 3、由于js循环过多导致使用app时手机发烫 咋么处理 4、java软件开发和web前端哪个就业前景好,工资高? 前端开发

2023-12-08
发篇java复习笔记(java课程笔记)

2022-11-09
python画图笔记(python画图作业)

2022-11-10
python课堂整理32(python笔记全)

2022-11-12
chipseeker简介

2023-05-18
差异表达基因研究

2023-05-21
python热量图和灰度图(python图片灰度处理)

2022-11-11
天正的图片怎么设置黑白,天正背景图改成白色

2023-01-05