R语言绘制聚类热图

news/2024/10/17 10:40:28/

聚类热图是一种直观的数据可视化工具。它以矩形彩色图表的形式呈现数据矩阵,每个单元格颜色对应特定数值,通常从低值的冷色调到高值的暖色调渐变。常应用于多个领域,如生物学中分析基因表达、蛋白质相互作用和生物群落;金融领域用于股票价格变化分析和风险评估;地理信息领域展示人口密度、气候数据等。还可用于网页设计分析用户行为及物流供应链管理。热图常结合层次聚类,以树状图展示行和列的聚类结果,便于发现相似模式。它能快速呈现复杂数据的结构和模式,帮助人们发现潜在规律和关系。

0x01 使用heatmap()函数

一、函数用法及参数说明

heatmap(x)

  • 1 主要输入数据参数
    • x:要绘制热图的数值矩阵。
  • 2 树状图和排序参数
    • 2.1 Rowv:确定是否以及如何计算和重新排序行树状图。可以是树状图、用于重新排序行树状图的向量、NA(表示不显示行树状图且不进行重新排序)或默认值NULL
    • 2.2 Colv:确定是否以及如何对列树状图进行重新排序。具有与Rowv参数相同的选项,并且当x是方阵时,Colv = "Rowv"表示列应与行相同处理。
  • 3 距离和聚类函数参数
    • 3.1 distfun:用于计算行和列之间距离(不相似性)的函数,默认为dist
    • 3.2 hclustfun:用于在RowvColv不是树状图时计算层次聚类的函数,默认为hclust。
  • 4 重新排序函数参数
    • reorderfun:函数function(d, w),用于重新排序行和列树状图,默认使用reorder.dendrogram
  • 5 表达式和对称参数
    • 5.1 add.expr:在调用image之后要评估的表达式,可用于向绘图添加组件。
    • 5.2 symm:逻辑值,指示是否对称地处理x,仅当x是方阵时可以为TRUE
    • 5.3 revC:逻辑值,指示是否应反转列顺序进行绘图,例如在对称情况下,对称轴与通常情况相同。
  • 6 标准化参数
    • scale:字符值,指示是否在行方向或列方向上对数值进行中心化和缩放,或不进行缩放,可选值为 “row”、“column” 和 “none”。默认值在symmFALSE时是 “row”,否则是 “none”。
  • 7 缺失值处理和边距参数
    • 7.1 na.rm:逻辑值,指示是否应删除NA值。
    • 7.2 margins:长度为 2 的数值向量,分别包含列和行名称的边距。
  • 8 颜色侧边栏参数
    • 8.1 ColSideColors:可选的长度为ncol(x)的字符向量,包含用于水平侧边栏的颜色名称,可用于注释x的列。
    • 8.2 RowSideColors:可选的长度为nrow(x)的字符向量,包含用于垂直侧边栏的颜色名称,可用于注释x的行。
  • 9 字体大小和标签参数
    • 9.1 cexRowcexCol:正数,用于在行或列轴标签中作为cex.axis。目前默认值仅分别使用行数或列数。
    • 9.2 labRowlabCol:用于行和列标签的字符向量,默认分别为rownames(x)colnames(x)
  • 10 标题和保留树状图参数
    • 10.1 mainxlabylab:主标题、x 轴和 y 轴标题,默认为无。
    • 10.2 keep.dendro:逻辑值,指示是否应将树状图保留为结果的一部分(当Rowv和 / 或Colv不为NA时)。
  • 11 其他参数
    • verbose:逻辑值,指示是否应打印信息。

二、绘制基本的聚类热图

# # 创建一个 5 行的矩阵,元素是来自标准正态分布的随机数
mat <- matrix(rnorm(25), nrow = 5)
# 使用 heatmap 函数绘制热图
# mat 是要绘制的矩阵数据
heatmap(mat)

三、调整和美化

# 创建一个 5 行的矩阵,元素是来自标准正态分布的随机数
mat <- matrix(rnorm(25), nrow = 5)# 定义一个颜色函数,使用颜色 "blue"、"white" 和 "red" 创建一个颜色渐变调色板
my_colors <- colorRampPalette(c("blue", "white", "red"))# 为列侧边生成颜色向量,长度与矩阵的列数相同
col_side_colors <- my_colors(ncol(mat))# 为行侧边生成颜色向量,长度与矩阵的行数相同
row_side_colors <- my_colors(nrow(mat))# 使用 heatmap 函数绘制热图
# mat 是要绘制的矩阵数据
# col = my_colors(100) 设置热图的颜色调色板,使用前面定义的颜色函数生成 100 种颜色
# ColSideColors = col_side_colors 为列添加侧边栏颜色
# RowSideColors = row_side_colors 为行添加侧边栏颜色
# Colv = NA 表示不进行列的聚类
# cexRow = 1 设置行标签的字体大小为 1
# cexCol = 1.2 设置列标签的字体大小为 1.2
heatmap(mat, col = my_colors(100), ColSideColors = col_side_colors, RowSideColors = row_side_colors, Colv = NA, cexRow = 1, cexCol = 1.2)

0x02 使用pheatmap包

一、参数说明

  • 1 主要输入数据参数

    • mat:要绘制热图的数值矩阵。
  • 2 颜色和断点参数

    • 2.1 color:用于热图的颜色向量。
    • 2.2 kmeans_k:若要在绘制热图前对行进行聚合,此为 kmeans 聚类的数量,若为NA则不对行进行聚合。
    • 2.3 breaks:覆盖矩阵值范围的数字序列,比颜色向量长一个元素,用于将值映射到颜色,若为NA则自动计算断点。
  • 3 边框和单元格尺寸参数

    • 3.1 border_color:热图单元格边框的颜色,若为NA则不绘制边框。
    • 3.2 cellwidth:单个单元格的宽度(以点为单位),若为NA则取决于绘图窗口大小。
    • 3.3 cellheight:单个单元格的高度(以点为单位),若为NA则取决于绘图窗口大小。
  • 4 标准化和聚类参数

    • 4.1 scale:指示是否在行或列方向上对数值进行中心化和缩放,可选值为 “row”(行方向)、“column”(列方向)和 “none”(不进行)。
    • 4.2 cluster_rowscluster_cols:布尔值或层次聚类对象,决定是否对行和列进行聚类
    • 4.3 clustering_distance_rowsclustering_distance_cols:用于聚类行和列的距离度量,可以是 “correlation”(皮尔逊相关系数)或其他dist函数支持的距离,若不是这些值则假定提供了距离矩阵。
    • 4.4 clustering_method聚类方法,接受与hclust相同的值。
    • 4.5 clustering_callback:回调函数,用于修改聚类,接受两个参数:原始层次聚类对象和用于聚类的矩阵,必须返回一个层次聚类对象。
    • 4.6 cutree_rowscutree_cols:基于层次聚类将行和列划分成的聚类数量。
    • 4.7 treeheight_rowtreeheight_col:若行和列进行聚类,则为树的高度,默认值为 50 点。
  • 5 图例和注释参数

    • 5.1 legend:逻辑值,决定是否绘制图例。
    • 5.2 legend_breaks:图例的断点向量。
    • 5.3 legend_labels:图例断点的标签向量。
    • 5.4 annotation_rowannotation_col:数据框,指定热图左侧和上方的注释,每行定义特定行或列的特征,通过相应的行名或列名与数据匹配。
    • 5.5 annotation:已弃用的参数,当前若annotation_col缺失,则设置annotation_col
    • 5.6 annotation_colors:列表,用于手动指定注释轨道的颜色,可以只为部分特征定义颜色。
    • 5.7 annotation_legend:逻辑值,显示注释轨道的图例是否绘制。
    • 5.8 annotation_names_rowannotation_names_col:逻辑值,显示行和列注释轨道的名称是否绘制。
    • 5.9 drop_levels:逻辑值,决定是否显示未使用的级别在图例中。
  • 6 标签和显示参数

    • 6.1 show_rownamesshow_colnames:布尔值,指定是否显示行名和列名。
    • 6.2 main:绘图的标题。
    • 6.3 fontsizefontsize_rowfontsize_col:字体大小。
    • 6.4 angle_col:列标签的角度,可以从几个预定义的选项中选择(0、45、90、270 和 315)。
    • 6.5 display_numbers:逻辑值,决定是否在单元格中打印数值,若为矩阵,则显示该矩阵的内容而不是原始值。
    • 6.6 number_format:数字显示的格式字符串(C 语言printf风格)。
    • 6.7 number_color:数字文本的颜色。
    • 6.8 fontsize_number:单元格中显示数字的字体大小。
  • 7 间隙和自定义标签参数

    • 7.1 gaps_rowgaps_col:向量,用于在行和列中引入间隙,若行和列未聚类,则使用此参数,对于聚类的行和列,可以使用cutree_rowcutree_col引入间隙。
    • 7.2 labels_rowlabels_col:自定义的行和列标签,用于替代行名和列名。
  • 8 文件输出参数

    • 8.1 filename:保存图片的文件路径,文件类型由路径中的扩展名决定,支持的格式有pngpdftiffbmpjpeg
    • 8.2 widthheight:手动指定输出文件的宽度和高度(以英寸为单位)。
    • 8.3 silent:逻辑值,不绘制图形(在使用gtable输出时很有用)。
  • 9 其他参数

    • na_col:指定矩阵中NA单元格的颜色。

二、准备工作

# 安装 pheatmap 包,如果已经安装过可以省略这一步
install.packages("pheatmap")# 加载 pheatmap 包以使用其函数
library(pheatmap)#这里使用R语言内置数据mtcars作为演示,该数据提取自 1974 年的《Motor Trend》美国杂志,包含了 32 辆汽车(1973 - 1974 年车型)的燃油消耗以及汽车设计和性能的 10 个方面的数据。
# 将 mtcars 数据集转换为矩阵,并进行中心化和标准化处理
# as.matrix 将 mtcars 转换为矩阵形式,以便后续处理
# scale 函数对矩阵进行标准化,默认会进行中心化(减去均值)和除以标准差操作
data <- as.matrix(scale(mtcars))# 定义一个颜色函数,使用颜色 "blue"、"white" 和 "red" 创建一个颜色渐变调色板
my_colors <- colorRampPalette(c("blue", "white", "red"))

三、绘制基本的聚类热图

使用pheatmap()函数绘制基本的热图。

# 使用 pheatmap 函数绘制热图
# data 是经过处理后的矩阵数据,将其作为输入绘制热图
# 此热图将展示 mtcars 数据集中各变量在标准化处理后的数值分布和关系
pheatmap(data)

四、调整和美化

# 使用 pheatmap 函数绘制热图
# data 是经过处理后的矩阵数据,作为热图的输入
# treeheight_row = 140 设置行聚类树的高度为 140
# treeheight_col = 11 设置列聚类树的高度为 11(由于关闭了列聚类,此参数也不生效)
# cluster_cols = FALSE 不进行列聚类,即热图的列不会进行聚类操作
# color = my_colors(1000) 使用自定义的颜色函数 my_colors 生成 1000 种颜色用于热图的颜色映射
# border_color = NA 不绘制热图单元格的边框
# fontsize = 10 设置热图的基本字体大小为 10
# fontsize_row = 8 设置热图中行名的字体大小为 8
# display_numbers = TRUE 在热图的单元格中显示数值
pheatmap(data,treeheight_row = 140,treeheight_col = 11,cluster_cols = FALSE,color = my_colors(1000),border_color = NA,fontsize = 10,fontsize_row = 8,display_numbers = TRUE)

http://www.ppmy.cn/news/1539688.html

相关文章

易基因:DNA甲基化+转录组综合分析鉴定调控猪睾丸发育的潜在基因|附经典研究思路

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 DNA甲基化在调控基因表达和睾丸发育中发挥重要作用。WGBS 和 RNA-Seq 数据综合分析可以绘制DNA甲基化与基因表达关系的全面图谱&#xff0c;从而鉴定受甲基化影响的关键基因。如对小鼠睾…

蓝桥杯刷题--幸运数字

幸运数字 题目: 解析: 我们由题目可以知道,某个进制的哈沙德数就是该数和各个位的和取整为0.然后一个幸运数字就是满足所有进制的哈沙德数之和.然后具体就是分为以下几个步骤 1. 我们先写一个方法,里面主要是用来判断,这个数在该进制下是否是哈沙德数 2. 我们在main方法里面调用…

【Flutter】Dart:类

在 Dart 中&#xff0c;类&#xff08;Class&#xff09;是面向对象编程的核心概念之一&#xff0c;提供了一种封装数据和功能的方式。理解 Dart 中的类以及它的相关特性是开发 Flutter 应用的基础。本教程将深入介绍 Dart 中类的定义、属性、构造函数、方法、接口、Mixin 以及…

Lumerical学习——分析工具(Analysis tools)

一、分析工具和模拟环境&#xff08;Analysis tools and the simulation environment&#xff09; 模拟计算完成后&#xff0c;模拟计算数据紧接着写到模拟工程文件中&#xff1b;甚至当模拟计算提前结束时计算得到的部分数据集也会写到文件中。当模拟完成后单击退出按钮、或者…

【深度学习 | 基础部分】深度学习导论

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

音视频入门基础:H.264专题(19)——FFmpeg源码中,获取avcC封装的H.264码流中每个NALU的长度的实现

一、引言 从《音视频入门基础&#xff1a;H.264专题&#xff08;18&#xff09;——AVCDecoderConfigurationRecord简介》中可以知道&#xff0c;avcC跟AnnexB不一样&#xff0c;avcC包装的H.264码流中&#xff0c;每个NALU前面没有起始码。avcC通过在每个NALU前加上NALUnitL…

Python基础:20、Python基础综合案例

数据可视化 - 折线图可视化 数据可视化 - 地图 数据可视化 - 动态柱状图 1.json数据格式 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能&#xff1a;json就是一种在各个编程语言中流通的数据格…

双目标定的原理

标定目的&#xff1a;建立相机成像几何模型并矫正透镜畸变。 建立相机成像几何模型&#xff1a;计算机视觉的首要任务就是要通过拍摄到的图像信息获取到物体在真实三维世界里相对应的信息&#xff0c;于是&#xff0c;建立物体从三维世界映射到相机成像平面这一过程中的几何模…