R语言如何绘制仅展示显著相关性的corr.test结果热图
相关性热图实现方案
核心逻辑是先通过校正后p值矩阵做掩码,把不满足阈值的相关系数替换为缺失值,再调用热图函数绘制,热图会自动对缺失值做单独着色、不展示对应相关性数值。
步骤1:预处理相关性矩阵
test$r和test$p.adj行名、列名完全匹配,可以直接按位置过滤:
# 备份原始结果避免误修改 r_sig <- test$r # 将p.adj >=0.5的位置替换为NA,热图不会展示这类位置的相关性值 r_sig[test$p.adj >= 0.5] <- NA
步骤2:绘制热图
方案A:pheatmap快速绘制(推荐)
pheatmap是矩阵类热图最常用的工具,默认参数适配度高:
# 未安装包时先运行安装 if (!requireNamespace("pheatmap", quietly = TRUE)) { install.packages("pheatmap") } library(pheatmap) pheatmap( mat = r_sig, cluster_rows = TRUE, # 不需要行聚类可改为FALSE cluster_cols = TRUE, # 不需要列聚类可改为FALSE display_numbers = FALSE, # 需要在格子内显示相关系数值改为TRUE color = colorRampPalette(c("#2b6cb0", "white", "#c53030"))(100), # 蓝-白-红配色适配正负相关 na_col = "grey90", # 不满足阈值的格子用浅灰色标记 main = "Spearman相关性热图(校正后p<0.5)" )
方案B:ggplot2自定义绘制
如果需要更高的图形自定义自由度,可以转为长表格式用ggplot2绘制:
if (!requireNamespace("tidyverse", quietly = TRUE)) { install.packages("tidyverse") } library(tidyverse) # 宽矩阵转成长数据框 plot_df <- r_sig %>% as.data.frame() %>% rownames_to_column("feature_x") %>% pivot_longer(cols = -feature_x, names_to = "feature_y", values_to = "spearman_r") ggplot(plot_df, aes(x = feature_y, y = feature_x, fill = spearman_r)) + geom_tile(colour = "white", linewidth = 0.5) + scale_fill_gradient2( low = "#2b6cb0", mid = "white", high = "#c53030", midpoint = 0, na.value = "grey90", name = "相关系数" ) + labs(x = NULL, y = NULL, title = "Spearman相关性热图(校正后p<0.5)") + theme_bw() + theme( axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1), panel.grid = element_blank() )
内容的提问来源于stack exchange,提问作者mike ropri
相关产品推荐
相关产品推荐

