如何调整R中corrplot图内相关系数与显著性星号的位置
解决corrplot中相关系数与显著性星号重叠的问题
目前用corrplot绘制相关系数可视化图时,添加的相关系数和p值显著性星号会出现重叠,想要把星号放在对应系数的上方,之前找到过3年前的Stack Overflow方案,这里明确下:截至2024年,corrplot官方最新版(0.92)仍没有内置的自动化参数直接实现这个需求,但可以通过简洁的手动调整方法解决,不用复杂的老方案。
具体实现步骤
方法:手动添加星号到系数上方
先绘制只显示相关系数的图,再单独计算位置添加星号,精准控制位置避免重叠:
# 第一步:绘制仅带相关系数的相关图,不显示显著性星号 p <- corrplot(C_corr, p.mat = testRes$p, type = 'lower', addCoef.col = 'grey50', number.cex = 0.75, order = 'hclust', tl.col = 'black', tl.cex = 0.8, cl.ratio = 0.2, tl.srt = 45, col = COL2('PuOr', 10), insig = 'blank') # 第二步:获取每个系数对应的坐标位置 coords <- corrplot:::corrplot.pos(p$corr, p$type, p$order, p$tl.pos) # 第三步:根据p值生成对应等级的星号 sig_levels <- c(0.001, 0.01, 0.05) stars <- sapply(testRes$p, function(x) { if (x < sig_levels[1]) '***' else if (x < sig_levels[2]) '**' else if (x < sig_levels[3]) '*' else '' }) stars <- matrix(stars, nrow = nrow(testRes$p)) # 转成矩阵匹配位置 # 第四步:把星号添加到系数上方(y坐标加0.1,可根据需要调整数值) mapply(function(x, y, row, col) { star <- stars[row, col] if (star != '') text(x, y + 0.1, star, col = 'grey20', cex = 0.9) }, coords$x, coords$y, coords$row, coords$col)
说明
- 可以通过调整
y + 0.1里的数值来上下移动星号,找到最适合的位置,彻底避免和系数重叠; - 这个方法比3年前的老方案更简洁,不需要复杂的坐标计算逻辑,利用corrplot内部的位置函数就能获取精准坐标。
内容的提问来源于stack exchange,提问作者AlexNB
相关产品推荐
相关产品推荐

