如何解决corrplot 空白并且没有用于无关紧要的值的文本 文档:问题:我想要的:我做什么:
根据文档 here 可以自定义无关紧要的值的行为,以隐藏它们。
文档:
文档告诉我们如何做我感兴趣的两件事:
- 相关系数 (
addCoef.col = "black"
) - 无意义的空白 (
sig.level=0.01,insig="blank"
)
问题:
当使用上述三个标签(连同其他标签,完整列表如下)时,相关系数也会出现在不显着的值中。
我想要的:
- 除了不重要的框外,所有框都有相关系数和颜色
- 指示框必须完全为空
我做什么:
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
参数可以采用矩阵。该矩阵必须对应于由其他参数 diag
和 type
给出的最终形状(在本例中:diag=TRUE
,type=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
将根据第一个参数中的逻辑值返回相应的分支(此处为白色或黑色)。 -
c(p > pval)
当 p 数组中的值大于 p 值阈值时,会创建一个具有 TRUE 的逻辑数组。这些是要屏蔽的值。从技术上讲,条件可能更复杂:c(p > pval | abs(corMat)>0.5)
。在这种情况下,pvalue 和相关系数都有一个条件。它对于对比度问题很有用,如果色带对于高相关性而言太暗,则应使用白色文本。 -
[upper.tri(p,diag = FALSE)]
用于仅选择我们感兴趣的值。upper.tri()
返回一个逻辑数组,当该值属于所需的矩阵上侧时为 TRUE。^
呈现从 -100 到 100 的值更有利于可读性和理解。
在某些情况下,在 corrplot 参数中使用 addCoefasPercent=TRUE,cl.lim = c(-100,100)
可以说更好。
查看此 answer 以了解如何重新排序(或保持排序),即您使用 order
参数指定的内容(可能的值为 "AOE","FPC","hclust","alphabet"
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。