R语言绘制聚类热图

server/2024/10/18 19:56:54/

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

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/server/131485.html

相关文章

LeetCode | 704.二分查找

标准的二分查找&#xff0c;直接上模板&#xff01; class Solution(object):def search(self, nums, target):""":type nums: List[int]:type target: int:rtype: int"""l 0r len(nums) - 1while l < r:mid (l r 1) / 2if nums[mid] …

MySQL 的数据类型

1.整数类型 1.1 tinyint tinyint 为小整数类型&#xff0c;存储空间为1个字节&#xff08;8位&#xff09;&#xff0c;有符号范围-128 ~ 127&#xff0c;无符号范围 0 ~ 255,此类型通常在数据库中表示类型的字段&#xff0c;如某一字段 type 表示学科,其中 “type1” 表示语文…

LVS-DR+Keepalived 高可用群集部署

LVS-DRKeepalived 高可用群集部署 Keepalived 的工作原理LVSKeepalived 高可用群集部署配置负载调度器&#xff08;主、备相同&#xff09;关闭防火墙和核心防护及准备IPVS模块配置keeplived&#xff08;主、备DR 服务器上都要设置&#xff09;启动 ipvsadm 服务调整 proc 响应…

【Flutter】合并多个流Stream

1.说明 无意间发现了一个好用的库rxdart&#xff0c;它为 Dart 的 Stream 添加了额外的功能。 2.功能 &#xff08;1&#xff09;合并多个流Stream 借助Rx.combineLatest2()合并两个流stream1和stream2。 注意&#xff1a;如果dart文件中同时使用了getx&#xff0c;需要隐…

人工智能正在扼杀云计算的可持续性

可持续性曾是公共云计算中备受推崇的优势。企业和云提供商大肆宣扬他们的绿色计划&#xff0c;推广采用可再生能源的数据中心&#xff0c;以减少碳足迹。 近几个月来&#xff0c;这个话题已悄然淡出人们的视线。罪魁祸首是什么&#xff1f;对人工智能功能的无限需求正在推动云…

Starrocks表的数据库字段类型及与MySQL 的差异

最近有用到Starrocks&#xff0c;实际使用中基本可以当作mysql来使用&#xff0c;但是数据库字段还是有所不同的。 与MySQL相同或相似的基础类型 数值类型 TINYINT、SMALLINT、INT/INTEGER、BIGINT&#xff1a;在Starrocks和MySQL中的定义和用途基本相似。都是用于存储整数&…

请解释一下Java中的泛型擦除。你对Java中的XML和JSON了解多少?

请解释一下Java中的泛型擦除。 Java中的泛型擦除&#xff08;Type Erasure&#xff09;是指Java编译器在编译泛型代码时&#xff0c;会移除泛型类型参数的相关信息&#xff0c;使得生成的字节码中不包含泛型类型信息。这个过程使得Java的泛型在运行时&#xff08;Runtime&…

树莓派应用--AI项目实战篇来啦-15.SSD Mobilenet V3目标检测

1. Mobilenet 介绍 Mobilenet 是一种专为移动和嵌入式视觉应用而设计的卷积神经网络。它们不使用标准的卷积层&#xff0c;而是基于使用深度可分离卷积的简化架构&#xff0c;使用这种架构&#xff0c;我们可以为移动和嵌入式设备&#xff08;例如&#xff1a;树莓派&#xff0…