如何使用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的基本操作,可以根据自己的需求进行深入的研究和使用。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/240188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:20
下一篇 2024-12-12 12:20

相关推荐

  • 如何使用Python获取某一行

    您可能经常会遇到需要处理文本文件数据的情况,在这种情况下,我们需要从文本文件中获取特定一行的数据并对其进行处理。Python提供了许多方法来读取和处理文本文件中的数据,而在本文中,…

    编程 2025-04-29
  • 如何使用jumpserver调用远程桌面

    本文将介绍如何使用jumpserver实现远程桌面功能 一、安装jumpserver 首先我们需要安装并配置jumpserver。 $ wget -O /etc/yum.repos…

    编程 2025-04-29
  • 如何使用Python读取CSV数据

    在数据分析、数据挖掘和机器学习等领域,CSV文件是一种非常常见的文件格式。Python作为一种广泛使用的编程语言,也提供了方便易用的CSV读取库。本文将介绍如何使用Python读取…

    编程 2025-04-29
  • Hibernate注解联合主键 如何使用

    解答:Hibernate的注解方式可以用来定义联合主键,使用@Embeddable和@EmbeddedId注解。 一、@Embeddable和@EmbeddedId注解 在Hibe…

    编程 2025-04-29
  • 如何使用HTML修改layui内部样式影响全局

    如果您想要使用layui来构建一个美观的网站或应用,您可能需要使用一些自定义CSS来修改layui内部组件的样式。然而,修改layui组件的样式可能会对整个页面产生影响,甚至可能破…

    编程 2025-04-29
  • 如何使用random生成不重复的随机数

    在编程开发中,我们经常需要使用随机数来模拟一些场景或生成一些数据。但是如果随机数重复,就会造成数据的不准确性。这时我们就需要使用random库来生成不重复且随机的数值。下面将从几个…

    编程 2025-04-29
  • 如何使用GPU加速运行Python程序——以CSDN为中心

    GPU的强大性能是众所周知的。而随着深度学习和机器学习的发展,越来越多的Python开发者将GPU应用于深度学习模型的训练过程中,提高了模型训练效率。在本文中,我们将介绍如何使用G…

    编程 2025-04-29
  • 如何使用Python导入Random库

    Python是一门优秀的编程语言,它拥有丰富的第三方库和模块。其中,Random库可谓是最常用的库之一,它提供了用于生成随机数的功能。对于开发人员而言,使用Random库能够提高开…

    编程 2025-04-29
  • 理解agentmain方法如何使用

    如果你不清楚如何使用agentmain方法,那么这篇文章将会为你提供全面的指导。 一、什么是agentmain方法 在Java SE 5.0中,Java提供了一个机制,允许程序员在…

    编程 2025-04-29
  • 如何使用Python将print输出到界面?

    在Python中,print是最常用的调试技巧之一。在编写代码时,您可能需要在屏幕上输出一些值、字符串或结果,以便您可以更好地理解并调试代码。因此,在Python中将print输出…

    编程 2025-04-29

发表回复

登录后才能评论