R 数据可视化 —— 聚类热图 pheatmap

这篇具有很好参考价值的文章主要介绍了R 数据可视化 —— 聚类热图 pheatmap。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在前面的章节中,我们介绍了如何使用 ggplot2 绘制热图

ggplot2 绘制热图的方式很多,如 geom_rastergeom_tile

但通常仅仅绘制热图是不够的,还需要对数据进行聚类,即绘制聚类热图。

例如,最常用的就是将差异基因的表达值绘制聚类热图,来查看基因在不同样本中的表达差异情况,或者比较不同聚类分组之间的差异。

绘制聚类热图的包有很多,我们主要介绍 pheatmapComplexHeatmap

简单示例

假设我们有如下数据

> df <- read.csv("~/Downloads/RPKM_DEG.csv", row.names = 1)
> df
       control1 control2 control3   treat1   treat2   treat3
Gene1   178.413  180.616  111.951   44.264   44.251   35.842
Gene2  1790.491   33.799 3076.195  533.618  527.694  493.286
Gene3    55.313   72.512   42.625   26.291   31.324   26.485
Gene4   138.170   10.234  168.461 1014.917  968.487 1013.409
Gene5   400.783  417.081  422.252   16.958   21.532   18.350
Gene6    16.466   10.856   17.788  117.155  113.056  117.383
Gene7   282.103  484.187  192.498   73.769   68.207   72.967
...

要绘制简单的热图,可以使用内置的 heatmap 函数

heatmap(as.matrix(df))

pheatmap,R 数据可视化,r语言,信息可视化,聚类

更改颜色,并为列添加列样本的分类颜色条

heatmap(as.matrix(df), col = rainbow(10)[3:9], ColSideColors = rep(c("pink", "purple"), each = 3))

pheatmap,R 数据可视化,r语言,信息可视化,聚类

内置函数提供的样式较少,无法对某些图形属性进行设置。

所以下面我们使用 pheatmap 包来绘制热图

pheatmap

pheatmap 对图形属性提供了更精细的控制

1. 安装导入

install.packages("pheatmap")

library(pheatmap)

2. 简单示例

pheatmap(df)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

这样看起来怪怪的,应该是基因的表达量差异,所以对行进行标准化

pheatmap(df, scale = "row")

pheatmap,R 数据可视化,r语言,信息可视化,聚类

嗯,一下子就顺眼多了,实验组和对照组的基因表达量差别明显

3. 聚类

默认情况下,会对数据的行列分别进行层次聚类,如果我们想在进行层次聚类之前,先对行特征,也就是基因进行 k-means 聚类,我们可以

pheatmap(df, scale = "row", kmeans_k = 3)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

先将基因聚为 3 类,再进行层次聚类

如果只想对其中行列中的一个进行聚类,可以使用 cluster_rowscluster_cols 参数,取消对行或列的距离

pheatmap(df, scale = "row", cluster_rows = FALSE)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

默认的距离度量为欧氏距离,也可以分别为行列指定不同的距离度量,例如

pheatmap(df, scale = "row", clustering_distance_rows = "correlation", clustering_distance_cols = "manhattan")

pheatmap,R 数据可视化,r语言,信息可视化,聚类

也可以使用 clustering_method 参数来指定不同的聚类方法,支持以下几种方法:

'ward', 'ward.D', 'ward.D2', 
'single', 'complete', 'average', 
'mcquitty', 'median', 'centroid'
pheatmap(df, scale = "row", clustering_method = "ward.D")

pheatmap,R 数据可视化,r语言,信息可视化,聚类

4. 图例

图例的设置很简单,即通过 legend_breaks 参数设置断点,legend_labels 参数设置断点处的标签

pheatmap(df, scale = "row", legend_breaks = c(-1, 0, 1), legend_labels = c("low", "median", "high"))

pheatmap,R 数据可视化,r语言,信息可视化,聚类

如果不想显示图例,直接设置 legend = F 就行

5. 边框

设置边框颜色

pheatmap(df, scale = "row", border_color = "white")

pheatmap,R 数据可视化,r语言,信息可视化,聚类

删除边框

pheatmap(df, scale = "row", border = F)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

6. 单元格

默认情况下,单元格的长度和宽度会根据图片的大小自动调整,如果想固定单元格的大小,可以使用 cellwidthcellheight 两个参数

pheatmap(df, scale = "row", cellwidth = 15, cellheight = 15)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

如果我们想在单元格中显示对于的数值,可以设置 display_numbers = TRUE

pheatmap(df, scale = "row", display_numbers = TRUE)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

对显示的数值进行格式化

pheatmap(
  df,
  scale = "row",
  display_numbers = TRUE,
  # 显示为科学计数法
  number_format = "%.1e",
  # 设置颜色
  number_color = "#4daf4a",
  # 设置数值字体大小
  fontsize_number = 10
)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

或者,为 display_numbers 参数传递一个矩阵

例如,根据表达值是否大于 100 来显示不同的标记

pheatmap(
  df, scale = "row", 
  display_numbers = matrix(ifelse(df > 100, "+", "-"), nrow = nrow(df)), 
  number_color = "#4daf4a", 
  fontsize_number = 10
)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

7. 分块

在不对数据进行聚类的情况下,可以对行列进行自定义划分为不同的块

pheatmap(
  df,
  scale = "row",
  cluster_rows = FALSE,
  cluster_cols = FALSE,
  gaps_col = 3,
  gaps_row = c(8, 9),
  border_color = "black"
)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

或者只对行或列进行分块

pheatmap(
  df,
  scale = "row",
  cluster_rows = FALSE,
  gaps_row = c(8, 12, 16),
  border_color = "black"
)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

总之,只能对未聚类的行或列进行分块

或者,根据层次聚类的结果,对数据进行分块

pheatmap(
  df,
  scale = "row",
  cutree_rows = 3,
  cutree_cols = 2
)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

8. 标签

使用 main 参数来设置图像的标题

pheatmap(
  df, scale = "row", 
  main = "title"
)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

可以使用 show_colnamesshow_rownames 不显示标签

pheatmap(
  df, scale = "row", 
  show_colnames = FALSE,
  show_rownames = FALSE
)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

分别设置标签的大小,同时设置列标签的倾斜角度,可选的角度有 270、0、45、90、315

pheatmap(
  df, scale = "row", 
  fontsize_row = 8,
  fontsize_col = 12,
  angle_col = 45
)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

也可以使用 fontsize 参数统一行列标签的大小

也可以自定义行列标签

pheatmap(
  df, scale = "row", 
  labels_row = paste0("Gene", LETTERS[1:20]),
  labels_col = rep(c("Cancer", "Noraml"), each = 3)
)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

9. 注释

我们可以分别为行和列构建分组信息,例如对于行是基因,可以将其分为癌基因和抑癌基因等,而列为样本可以分为癌症和配对正常样本,同时样本对应的患者应该会有年龄性别等信息

例如

# 行注释信息
annotation_row <- data.frame(
  GeneClass = sample(c("oncogene", "tumor suppressor"), size = 20, replace = TRUE)
)
rownames(annotation_row) <- paste0("Gene", 1:20)
# 列注释信息
annotation_col <- data.frame(
  type = rep(c("Noraml", "Cancer"), each = 3),
  Age = sample(30:60, 6)
)
rownames(annotation_col) <- colnames(df)

我们可以将这些信息以颜色条的方式添加到图中

pheatmap(
  df,
  scale = "row",
  color = rainbow(7),
  annotation_row = annotation_row,
  annotation_col = annotation_col
)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

隐藏图例

pheatmap(
  df,
  scale = "row",
  color = rainbow(7),
  annotation_row = annotation_row,
  annotation_col = annotation_col,
  legend = FALSE,
  angle_col = 45,
)

pheatmap,R 数据可视化,r语言,信息可视化,聚类

10. 对象信息

我们可以回去 pheatmap 函数返回的对象的信息

> p <- pheatmap(df, scale = "row")
> summary(p)
         Length Class  Mode   
tree_row 7      hclust list   
tree_col 7      hclust list   
kmeans   1      -none- logical
gtable   6      gtable list 

可以看到,返回对象 p 中包含 4 个变量,我们可以根据 tree_rowtree_col 提取出对应的行列顺序

> p$tree_row$order
 [1]  4  6 15  8 12 14 10 11  2  1 16 17  3  7 13 18  5  9 19 20
> p$tree_col$order
[1] 4 5 6 2 1 3

提取这些信息有助于我们对数据进行分组,用于后续分析

参数列表
pheatmap,R 数据可视化,r语言,信息可视化,聚类

数据:
https://github.com/dxsbiocc/learn/blob/main/data/RPKM_DEG.csv文章来源地址https://www.toymoban.com/news/detail-859277.html

到了这里,关于R 数据可视化 —— 聚类热图 pheatmap的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 聚类分析 | MATLAB实现基于AHC聚类算法可视化

    效果一览 基本介绍 AHC聚类算法,聚类结果可视化,MATLAB程序。 Agglomerative Hierarchical Clustering(自底向上的层次聚类)是一种经典的聚类算法,它的主要思想是将每个数据点视为一个簇,然后将距离最近的两个簇合并,直到达到预设的聚类个数或者所有数据点都被合并为一个簇

    2024年02月11日
    浏览(44)
  • 聚类分析 | MATLAB实现基于DBSCAD密度聚类算法可视化

    效果一览 基本介绍 基于DBSCAD密度聚类算法可视化,MATLAB程序。 使用带有KD树加速的dbscan_with_kdtree函数进行密度聚类。然后,我们根据每个簇的编号使用hsv色彩映射为每个簇分配不同的颜色,并用散点图进行可视化展示。同时,我们用黑色的\\\"x\\\"标记表示噪声点。请注意,DBSC

    2024年02月11日
    浏览(37)
  • 聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化

    效果一览 基本介绍 基于自组织特征映射聚类算法(SOM)的数据聚类可视化 可直接运行 注释清晰 Matlab语言 1.多特征输入,图很多,包括可视化图、权重位置图、邻点连接图、输入平面图等等,可完全满足您的需求~ 2.直接替换数据即可用 适合新手小白~ 3.附赠案例数据 可直接

    2024年02月09日
    浏览(37)
  • Python用 tslearn 进行时间序列聚类可视化

    我们最近在完成一些时间序列聚类任务,偶然发现了 tslearn 库。我很想看看启动和运行 tslearn 已内置的聚类有多简单,结果发现非常简单直接 ( 点击文末“阅读原文”获取完整 代码数据 )。 相关视频 首先,让我们导入我们需要的库: netdata_pandas 用于提取一些时间序列数据

    2024年02月11日
    浏览(34)
  • 数据的语言:学习数据可视化的实际应用

    数据可视化应该学什么?这是一个在信息时代越来越重要的问题。随着数据不断增长和积累,从社交媒体到企业业务,从科学研究到医疗健康,我们都面临着海量的数据。然而,数据本身往往是冰冷、抽象的数字,对于大多数人而言,很难从中获得实质性的信息。这时,数据

    2024年02月11日
    浏览(37)
  • R语言课程论文-飞机失事数据可视化分析

    数据来源:Airplane Crashes Since 1908 (kaggle.com) 代码参考:Exploring historic Air Plane crash data | Kaggle 数据指标及其含义 指标名 含义 Date 事故发生日期(年-月-日) Time 当地时间,24小时制,格式为hh:mm Location 事故发生的地点 Operator 航空公司或飞机的运营商 Flight 由飞机操作员指定的航班

    2024年02月22日
    浏览(34)
  • 用数据说话,R语言有哪七种可视化应用?

    今天,随着数据量的不断增加,数据可视化成为将数字变成可用的信息的一个重要方式。R语言提供了一系列的已有函数和可调用的库,通过建立可视化的方式进行数据的呈现。在使用技术的方式实现可视化之前,我们可以先和AI科技评论一起看看如何选择正确的图表类型。 

    2024年02月08日
    浏览(78)
  • 毕业设计:基于python微博舆情分析系统+可视化+Django框架 K-means聚类算法(源码)✅

    毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅 感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。

    2024年01月19日
    浏览(49)
  • R语言lasso惩罚稀疏加法(相加)模型SPAM拟合非线性数据和可视化

    本文将关注R语言中的LASSO(Least Absolute Shrinkage and Selection Operator)惩罚稀疏加法模型(Sparse Additive Model,简称SPAM)。SPAM是一种用于拟合非线性数据的强大工具,它可以通过估计非线性函数的加法组件来捕捉输入变量与响应变量之间的复杂关系 ( 点击文末“阅读原文”获取完

    2024年02月11日
    浏览(37)
  • R语言 一种功能强大的数据分析、统计建模 可视化 免费、开源且跨平台 的编程语言

    R语言是一种广泛应用于数据分析、统计建模和可视化的编程语言。它由新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼开发,并于1993年首次发布。R语言是一个免费、开源且跨平台的语言,它在统计学和数据科学领域得到了广泛的应用。 R语言具有丰富的数据处理、统计分

    2024年02月07日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包