corrplot 空白且没有文本表示无关紧要的值

corrplot blank and no text for insignificant values

根据文档 here 可以自定义无关紧要的值的行为,以隐藏它们。

文档:

文档告诉我们如何做两件我感兴趣的事情:

问题:

当使用上述三个标签(连同其他标签,下面的完整列表)时,相关系数也会出现在无关紧要的值上。

我想要的:

我的工作:

cr<-colorRampPalette(c("lightblue","white","yellow"))(200)
p <- cor.mtest(dataCor)
corMat=cor(dataCor)

corrplot(corMat, type="upper",method="color",order="original"
            , col=cr
            , tl.col="black"
            , addCoef.col="black",
            , diag=FALSE,number.cex=.7
            , insig="blank"
            , p.mat = p,sig.level=0.01,tl.srt = 45)

结果(摘录): 目标是删除 prop02 x prop04 的“-0.01”和所有零

编辑:我知道道具不按顺序排列,在我的情况下是故意的(它们有不同的名称并以相关方式分组)

更新: 我找到了这个帖子:corrplot shows insignificant correlation coefficients even when insig = "blank" is set

它“有效”(仍然是一个肮脏的修复)但仅适用于具有对角线的方阵。如何使其适用于 type="upper"diag=FALSE

解决该问题的一种方法是创建一个包含每个单元格文本颜色的颜色矩阵。

addCoef.col参数可以采用矩阵。该矩阵必须对应于其他参数 diagtype 给出的最终形状(在这种情况下:diag=TRUEtype=upper

创建此矩阵的一种方法是从 p 值矩阵创建它,如下所示。

pval <- 0.01 #threshold
p <- cor.mtest(dataCor) # compute p-values
corMat <- cor(dataCor) # compute correlation values

#create the color matrix from the p-value matrix, select only necessary data
mycol <-ifelse(c(p > pval), "white", "black")[upper.tri(p, diag = FALSE)]

这里发生了什么:

  • ifelse 将 return 给定第一个参数中的逻辑值的相应分支(此处为白色或黑色)。
  • 当 p 数组中的值大于 p 值阈值时,
  • c(p > pval) 创建一个值为 TRUE 的逻辑数组。这些是要屏蔽的值。从技术上讲,条件可能更复杂: c(p > pval | abs(corMat)>0.5)。在这种情况下,p 值和相关系数都有一个条件。它对于对比度问题很有用,如果色带对于高相关性来说太暗,则应使用白色文本。
  • [upper.tri(p, diag = FALSE)] 仅服务于 select 我们感兴趣的值。 upper.tri() returns 逻辑数组,当值属于所需值时为 TRUE矩阵的上侧。^

从 -100 到 100 的值更利于可读性和理解。 在某些情况下,在 corrplot 参数中使用 addCoefasPercent=TRUE,cl.lim = c(-100, 100) 可以说更好。

查看此 answer 以了解如何重新排序(或继续排序),即您使用 order 参数指定的内容(可能的值为 "AOE", "FPC", "hclust", "alphabet".