R语言使用pheatmap绘制两组变量特征相关系数热图
本文演示如何在R语言中使用pheatmap和psych包,针对两组不同维度或特征的变量集,计算其Pearson相关系数矩阵,并定制绘制包含聚类效果、数值标注及显著性星号的热图。
准备数据
首先需要导入两组分别包含不同变量的数据集,并确保它们具有相同的行观测数(如样本ID对应),以便进行逐行配对分析。以下示例将两列数据存储为csv文件后读取:
> # 设置工作目录并加载数据
> setwd("D:/weixin/")
> rows <- read.csv("rows.csv")
> cols <- read.csv("cols.csv")
>
> # 查看数据结构
> str(rows)
'data.frame': 100 obs. of 6 variables:
$ r1: num 476 482 640 452 308 ...
$ r2: num 2059 1987 1952 1927 1854 ...
# ... 省略其他列
> str(cols)
'data.frame': 100 obs. of 5 variables:
$ c1: num 2387 2437 2484 2349 2198 ...
# ... 省略其他列
生成基础相关性热图
使用psych包的corr.test()函数计算两组变量间的双边Pearson相关系数及其P值。随后调用pheatmap绘制热力图。clustering_method参数控制聚类方式,默认采用平均连接法(average)。
> library(psych) > data.corr <- corr.test(rows, cols, method="pearson", adjust="fdr") > data.r <- data.corr$r # 提取相关系数矩阵 > data.p <- data.corr$p # 提取P值矩阵 > > library(pheatmap) > pheatmap(data.r, clustering_method="average")
第1步:固定行顺序仅对列聚类
目的:保持第一组变量(行)在图中的顺序不变,仅根据第二组变量(列)与第一组的相关程度对列进行重新排序。
操作:将cluster_rows设置为F。
> pheatmap(data.r, clustering_method="average", cluster_rows=F)
第2步:在图中显示具体相关系数
目的:直观展示每个网格点的相关数值,便于读取精确度。
入口:pheatmap函数的display_numbers参数。
动作:先将数值保留两位小数,再传入绘图函数。
> # 格式化为保留两位小数的字符矩阵
> data.r.fmt <- matrix(sprintf("%.2f", data.r), nrow=nrow(data.p))
> pheatmap(data.r, clustering_method="average", cluster_rows=F, display_numbers=data.r.fmt)
第3步:添加显著性标记
目的:在热图上标注统计显著性水平,增强图表的科学严谨性。
重要参数:基于P值定义显著性阈值,通常 P<0.01 记为 ***,P<0.05 记为 **,P<0.1 记为 *。
操作:定义辅助函数生成星号矩阵,并替换display_numbers内容。
> getSig <- function(dc) {
+ sc <- ''
+ if (dc < 0.01) sc <- '***'
+ else if (dc < 0.05) sc <- '**'
+ else if (dc < 0.1) sc <- '*'
+ sc
+ }
> sig.mat <- matrix(sapply(data.p, getSig), nrow=nrow(data.p))
> str(sig.mat)
chr [1:6, 1:5] "*" "***" "" "***" "***" ...
> pheatmap(data.r, clustering_method="average", cluster_rows=F, display_numbers=sig.mat)
进阶优化:调整聚类与添加标题
若需完全改变聚类策略或添加图表标题,可继续使用pheatmap的其他参数。例如将聚类方法改为“完整连接”(complete),并补充主标题main。
> pheatmap(data.r, clustering_method="complete", cluster_rows=F, display_numbers=sig.mat, main="Corr Heatmap")
以上就是R语言两组变量特征相关关系热图绘制画法的详细内容,更多关于R语言绘制相关关系热图的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









