无热图不组学!高阶文献热图R语言绘制小专场拿捏

简介: 近在阅读近五年的一区高分的机器学习文献,其中有一种图出现频率特别高——热图。《

一、概述



近在阅读近五年的一区高分的机器学习文献,其中有一种图出现频率特别高——热图。《Machine Learning and the Future of Cardiovascular Care: JACC State-of-the-Art Review》

640.png


《Comparison of Machine Learning Methods for Predicting Outcomes After In-Hospital Cardiac Arrest》

640.png

640.png


1. 什么是热图(Heatmap)?


热图(Heatmap)是一种常见的数据可视化技术,通常用于展示高维数据的结构、相互关系,以及在不同条件或时间点下的变化等信息。热图的主要特点是使用颜色来表示数据的大小或相对大小,能够有效地展示大量的数据,并帮助用户快速发现数据中的规律和趋势。


热图(Heatmap)通常由两个坐标轴组成,一个表示样本或实验条件,另一个表示变量或特征。数据通常以矩阵的形式呈现,每个单元格的颜色代表该位置上的数据值。不同颜色通常代表不同的数值范围,例如红色可以表示高值,蓝色可以表示低值。


2. 热图的应用?


  1. 基因表达谱研究:热图可以用来展示基因在不同样本中的表达水平,从而帮助研究人员发现基因的表达模式和相关性。
  2. 生物信息学研究:热图可以用来展示基因组、转录组、蛋白质组等生物信息学数据的分布和关系,从而帮助研究人员分析数据并发现相关性。
  3. 市场分析:热图可以用来展示市场中不同产品或服务的销售情况,从而帮助企业分析市场需求和趋势。
  4. 社交网络分析:热图可以用来展示社交网络中不同用户之间的关系和交互情况,从而帮助研究人员分析社交网络的结构和特征。
  5. 环境监测:热图可以用来展示环境监测数据中不同地点或时间点的数据变化情况,从而帮助环境监测人员分析环境变化和趋势。


二、数据集



  1. 安装及其使用
install.packages('pheatmap')
library(pheatmap)


  1. 读取数据

首先,我们需要读取sbpdata数据集,查看数据集信息

# 加载 R 自带数据集 mtcars
data(mtcars)
# 删除数据集的一列,并转换数据集的行列
mtcars_matrix <- t(as.matrix(mtcars[, -1]))


数据集展示

Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout Valiant Duster 360 Merc 240D Merc 230 Merc 280 Merc 280C Merc 450SE Merc 450SL Merc 450SLC Cadillac Fleetwood
cyl          6             6          4              6                 8       6          8       4.0      4.0      6.0       6.0        8.0        8.0         8.0                  8
disp       160           160        108            258               360     225        360     146.7    140.8    167.6     167.6      275.8      275.8       275.8                472
hp         110           110         93            110               175     105        245      62.0     95.0    123.0     123.0      180.0      180.0       180.0                205
     Lincoln Continental Chrysler Imperial Fiat 128 Honda Civic Toyota Corolla Toyota Corona Dodge Challenger AMC Javelin Camaro Z28 Pontiac Firebird Fiat X1-9 Porsche 914-2 Lotus Europa
cyl                    8                 8      4.0         4.0            4.0           4.0                8           8          8                8         4           4.0          4.0
disp                 460               440     78.7        75.7           71.1         120.1              318         304        350              400        79         120.3         95.1
hp                   215               230     66.0        52.0           65.0          97.0              150         150        245              175        66          91.0        113.0
     Ford Pantera L Ferrari Dino Maserati Bora Volvo 142E
cyl               8            6             8          4
disp            351          145           301        121
hp              264          175           335        109


三、基础用法



用pheatmap函数绘制热图,标准化参数scale可选"none", "row", "column";分别是不做归一化处理,按行均一化,按列均一化


1. 不做归一化处理(none)


pheatmap(mtcars_matrix,scale='none')


640.png

none


2. 均一化(row)


pheatmap(mtcars_matrix,scale='row')

640.png


row


3. 按列均一化(column)


pheatmap(mtcars_matrix,scale='column')

640.png

column


4. 一些个性化参数的设置


pheatmap(mtcars_matrix,scale = "none",
         show_colnames = TRUE, # 显示列名
         show_rownames=TRUE, # 显示行名
         fontsize=10, # 字体大小
         color = colorRampPalette(c('#ADD8E6','yellow','#ff0000'))(50), # 指定颜色,50代表生成了50种渐变色的向量
         annotation_legend=TRUE, # 显示图例
         border_color="black",  # 每个方块边框颜色
         cluster_rows = TRUE, # 对行聚类
         cluster_cols = TRUE, # 对列聚类,行列聚类使用的度量方法clustering_distance_rows=“euclidean”,一般默认欧氏距离;也可选用其他度量方法,如可选用 "correlation"表示按照 Pearson correlation方法进行聚类
         display_numbers=TRUE, # 在热图中每个单元格中显示具体数值
         number_color="black", # 数值的颜色
         cellwidth = 30,cellheight = 15, # 设置热图方块宽度和高度
         main="mtcars" # 设置图形标题
)

640.png


image


5. 聚类热图划分隔断


# 尝试进行聚类热图划分隔断,假设导入的数据未进行相关性系数计算,
pheatmap(mtcars_matrix, 
         scale = "row", # 按行归一化,查看因子在不同样本中的分布情况
         cluster_cols = FALSE, clustering_distance_rows = "correlation", # 取消列聚类,表示行聚类使用皮尔森相关系数聚类
         treeheight_row = 30, # 设置行聚类树高
         cutree_rows =4 # 根据样品列聚类情况将热图的行方向隔开为4份
)

640.png


image


四、组合图进阶



640.jpg

一篇Science文章的一个高颜值高难度组合图表(如上图)


install.packages("devtools")
library(devtools)
devtools::install_github("shinepreventer/ggcor-hou")


这个开发者把ggcor这个包关闭了,因此需要从备用仓库下载,而且下载会遇到一些错误,解决方法如下:


install.packages(c('ggnewscale', 'igraph', 'tidygraph'))
library(devtools)
devtools::install_github("Github-Yilei/ggcor")
# 执行结果,代表需要更新的R包
Which would you like to update?
1: All                          
2: CRAN packages only           
3: None                         
4: rlang (1.0.6 -> 1.1.1) [CRAN]
5: purrr (0.3.5 -> 1.0.1) [CRAN]
6: cli   (3.4.1 -> 3.6.1) [CRAN]
#下载一段时间后,会让你选择输入一个数字1-14,就是版本的问题,随便填写。
# 重启R,再执行
remove.packages("stringi")
install.packages("stringi", type="binary")
remove.packages("rlang")
install.packages("rlang", type="binary")
remove.packages("purrr")
install.packages("purrr", type="binary")
remove.packages("cli")
install.packages("cli", type="binary")
library(devtools)
devtools::install_github("Github-Yilei/ggcor",force=TRUE)
library(ggcor)


1. 基本使用方法


install.packages('vegan')
library(vegan)
library(ggcor)
install.packages('dplyr')
library(dplyr)
quickcor(mtcars, cor.test = TRUE) +
  geom_square(data = get_data(type = "lower", show.diag = FALSE)) +
  geom_mark(data = get_data(type = "upper", show.diag = FALSE)) +
  geom_abline(slope = -1, intercept = 12)

640.png

image


2. 进阶使用方法()


library(dplyr)
#> Warning: package 'dplyr' was built under R version 3.6.2
data("varechem", package = "vegan")
data("varespec", package = "vegan")
mantel <- mantel_test(varespec, varechem,
                      spec.select = list(Spec01 = 1:7,
                                         Spec02 = 8:18,
                                         Spec03 = 19:37,
                                         Spec04 = 38:44)) %>% 
  mutate(rd = cut(r, breaks = c(-Inf, 0.2, 0.4, Inf),
                  labels = c("< 0.2", "0.2 - 0.4", ">= 0.4")),
         pd = cut(p.value, breaks = c(-Inf, 0.01, 0.05, Inf),
                  labels = c("< 0.01", "0.01 - 0.05", ">= 0.05")))
quickcor(varechem, type = "upper") +
  geom_square() +
  anno_link(aes(colour = pd, size = rd), data = mantel) +
  scale_size_manual(values = c(0.5, 1, 2)) +
  scale_colour_manual(values = c("#D95F02", "#1B9E77", "#A2A2A288")) +
  guides(size = guide_legend(title = "Mantel's r",
                             override.aes = list(colour = "grey35"), 
                             order = 2),
         colour = guide_legend(title = "Mantel's p", 
                               override.aes = list(size = 3), 
                               order = 1),
         fill = guide_colorbar(title = "Pearson's r", order = 3))


640.png

image


3. 高阶使用方法(原型热图)


install.packages('ambient')
library(ambient)
rand_correlate(100, 8) %>% ## require ambient packages
  quickcor(circular = TRUE, cluster = TRUE, open = 45) +
  geom_colour(colour = "white", size = 0.125) +
  anno_row_tree() +
  anno_col_tree() +
  set_p_xaxis() +
  set_p_yaxis()


640.png

image


五、热图解析方法



  1. 观察颜色条:热图操作中最基本的部分就是颜色条,显示出了数据的分布情况和数据的值域。颜色条上颜色的变化从低到高,代表数据从小到大的变化。通过研究颜色条,可以快速了解数据的分布和值域,从而对热图中的数据分布产生直观感受。
  2. 识别异常值:通过比较颜色条的级别和图中对应单元格的颜色,可以识别矩阵中的异常值。某些红或蓝色(根据您使用的颜色映射)显然与其他大部分颜色不同,这些点就是潜在的异常值。识别这些异常值有助于进一步的探究和分析数据表。
  3. 查找模式:可以观察热图中的颜色模式来发现数据之间的关系。例如,一列中的许多蓝色通常表示值通常较小,而很少的红色可能表示较大的不寻常值。在热图中发现模式有助于理解数据之间的关系,进而引导进一步的数据分析和挖掘。
  4. 调整参数:热图通常是基于不同的参数得到的。您可以修改颜色条和颜色映射,或者选择在不同的颜色组中选择合适的颜色。这些调整允许您更好地理解数据并突出矩阵中重要的部分。
目录
相关文章
|
机器学习/深度学习 数据挖掘
这图怎么画| 一个用于展示多种机器学习模型结果的热图
这图怎么画| 一个用于展示多种机器学习模型结果的热图
158 0
|
7月前
|
算法 数据挖掘 Python
【数据挖掘】层次聚类DIANA、AGNES算法讲解及实战应用(图文解释 超详细)
【数据挖掘】层次聚类DIANA、AGNES算法讲解及实战应用(图文解释 超详细)
531 0
|
6月前
|
数据采集 算法 安全
CVPR 2024:给NeRF开透视眼!稀疏视角下用X光进行三维重建,9类算法工具包全开源
【6月更文挑战第28天】CVPR 2024亮点:SAX-NeRF框架开源!融合X光与NeRF,提升3D重建效果。X3D数据集验证,Lineformer+MLG策略揭示物体内部结构,增强几何理解。虽有计算成本及泛化挑战,但为计算机视觉和医学影像开辟新路径。[论文链接](https://arxiv.org/abs/2311.10959)**
183 5
|
7月前
|
算法 数据可视化 数据挖掘
【数据挖掘】密度聚类DBSCAN讲解及实战应用(图文解释 附源码)
【数据挖掘】密度聚类DBSCAN讲解及实战应用(图文解释 附源码)
608 1
|
7月前
|
数据可视化 算法 数据挖掘
R语言 PCA(主成分分析),CA(对应分析)夫妻职业差异和马赛克图可视化
R语言 PCA(主成分分析),CA(对应分析)夫妻职业差异和马赛克图可视化
|
7月前
|
数据可视化 数据挖掘 定位技术
数据分享|R语言生态学种群空间点格局分析:聚类泊松点过程对植物、蚂蚁巢穴分布数据可视化
数据分享|R语言生态学种群空间点格局分析:聚类泊松点过程对植物、蚂蚁巢穴分布数据可视化
|
7月前
|
数据可视化 Python
R语言布朗运动模拟股市、物种进化树状图、二项分布可视化
R语言布朗运动模拟股市、物种进化树状图、二项分布可视化
|
7月前
R语言如何用潜类别混合效应模型(LCMM)分析抑郁症状
R语言如何用潜类别混合效应模型(LCMM)分析抑郁症状
|
7月前
|
安全
R语言做复杂金融产品的几何布朗运动的模拟
R语言做复杂金融产品的几何布朗运动的模拟
|
机器学习/深度学习 数据采集 算法
高分SCI必备:使用R语言和机器学习算法解析心脏病中的变量重要性
心脏病是全球范围内主要的致死因素之一[1],给人们的生活和健康带来了巨大的挑战。为了预测和诊断心脏病,研究人员使用了各种机器学习算法,并通过分析变量重要性来理解特征对心脏病的影响。
796 0