展示相关矩阵上/下半部分时,如何正确放置显著相关系数?
解决ggcorrplot半矩阵模式下显著相关系数值错位问题
使用ggcorrplot可视化相关矩阵时,需要移除不显著的相关系数值但保留单元格颜色。完整矩阵展示时可实现该需求,但切换到下半/上半矩阵模式时,系数值会出现位置错位。
完整矩阵的正确实现(对比参考)
先给出完整矩阵的实现代码,作为功能正常的对照:
library(ggplot2) library(ggcorrplot) # 创建相关系数矩阵 corr <- round(cor(mtcars),1) # 创建与相关系数对应的p值矩阵 corr_p <- cor_pmat(mtcars) # 展示完整矩阵时的代码 ggcorrplot(corr, lab = FALSE, p.mat = corr_p, sig.level = 1) + geom_text( aes(x = Var2, y = Var1, label = round(value, 1)), \(d) subset(d, pvalue < 0.05))

下半矩阵的修正方案
原代码问题
直接沿用完整矩阵的geom_text筛选逻辑时,会把上半区域的显著值也绘制出来,导致数值错位:
# 导致错位的下半矩阵代码 ggcorrplot(corr, lab = FALSE, p.mat = corr_p, sig.level = 1, type = 'lower') + geom_text( aes(x = Var2, y = Var1, label = round(value, 1)), \(d) subset(d, pvalue < 0.05))

修正代码
在数据子集筛选中,额外添加下半矩阵的区域判断(Var1 >= Var2),只保留下半区域的显著值:
# 修正后的下半矩阵代码 ggcorrplot(corr, lab = FALSE, p.mat = corr_p, sig.level = 1, type = 'lower') + geom_text( aes(x = Var2, y = Var1, label = round(value, 1)), \(d) subset(d, pvalue < 0.05 & Var1 >= Var2))
上半矩阵的修正方案
原代码问题
同样,未筛选上半区域时,下半区域的显著值会错位显示到上半矩阵中:
# 导致错位的上半矩阵代码 ggcorrplot(corr, lab = FALSE, p.mat = corr_p, sig.level = 1, type = 'upper') + geom_text( aes(x = Var2, y = Var1, label = round(value, 1)), \(d) subset(d, pvalue < 0.05))

修正代码
添加上半矩阵的区域判断(Var1 <= Var2),只保留上半区域的显著值:
# 修正后的上半矩阵代码 ggcorrplot(corr, lab = FALSE, p.mat = corr_p, sig.level = 1, type = 'upper') + geom_text( aes(x = Var2, y = Var1, label = round(value, 1)), \(d) subset(d, pvalue < 0.05 & Var1 <= Var2))
内容的提问来源于stack exchange,提问作者tassones
相关产品推荐
相关产品推荐

