如何在 R 的 corrplot 包中围绕重要值画线

How to draw line around significant values in R's corrplot package

有人要求我为合作者获取相关图。 我的选择是使用 R 来完成任务,特别是 corrplot 包。 我一直在 Internet 和 I found multiple ways to obtain such graphics 上进行研究,但没有要求我提供具体的图形(正如您在图片中看到的那样,通过在重要图块周围绘制一个正方形来突出显示重要值),这让我感到困惑.

Example of the correlation plot required

我获得的最接近结果是使用此行下的代码,但我似乎无法找到在重要图块周围画线的选项(如果存在)。

#Insignificant correlations are leaved blank
corrplot(res3$r, type="upper", order="hclust", 
         p.mat = res3$P, sig.level = 0.01, insig = "blank")

我尝试添加 "addrect" 参数,但没有成功。

#Insignificant correlation are crossed
corrplot(res3$r, type="upper", order="hclust", p.mat = res3$P,
         addrect=2, sig.level = 0.01, insig = "blank")

我们将不胜感激。

corrplot 允许您向已存在的地块添加新地块。因此,一旦您创建了初始相关矩阵的图,您可以使用 corrplot(..., add = TRUE).

以迭代方式简单地添加您想要突出显示的单元格

要实现您的目标,唯一需要做的就是使用索引矢量(我称之为 'ids')来告诉 R 要突出显示哪些单元格。请注意,为了简单起见,我采用了初始相关矩阵的随机 sample,但是 ids <- which(p.value < 0.01)(假设您已将显着性水平存储在单独的向量中)之类的东西会类似地工作。

library(corrplot)

## create and visualize correlation matrix
data(mtcars)
M <- cor(mtcars)

corrplot(M, cl.pos = "n", na.label = " ")

## select cells to highlight (e.g., statistically significant values)
set.seed(10)
ids <- sample(1:length(M), 15L)

## duplicate correlation matrix and reject all irrelevant values
N <- M
N[-ids] <- NA

## add significant cells to the initial corrplot iteratively 
for (i in ids) {
  O <- N
  O[-i] <- NA
  corrplot(O, cl.pos = "n", na.label = " ", addgrid.col = "black", add = TRUE, 
           bg = "transparent", tl.col = "transparent")
}

请注意,您也可以使用 corrplot(N, ...) 一次性添加所有值以突出显示(即,不需要 for 循环),但在这种情况下,会绘制出不需要的黑边围绕绘图区。