使用 corrplot 进行操作
Manipulations with corrplot
我想操纵 R 包中的绘图 corrplot
。使用包中的以下示例:
library(corrplot)
data(mtcars)
M <- cor(mtcars)
cor.mtest <- function(mat, conf.level = 0.95){
mat <- as.matrix(mat)
n <- ncol(mat)
p.mat <- lowCI.mat <- uppCI.mat <- matrix(NA, n, n)
diag(p.mat) <- 0
diag(lowCI.mat) <- diag(uppCI.mat) <- 1
for(i in 1:(n-1)){
for(j in (i+1):n){
tmp <- cor.test(mat[,i], mat[,j], conf.level = conf.level)
p.mat[i,j] <- p.mat[j,i] <- tmp$p.value
lowCI.mat[i,j] <- lowCI.mat[j,i] <- tmp$conf.int[1]
uppCI.mat[i,j] <- uppCI.mat[j,i] <- tmp$conf.int[2]
}
}
return(list(p.mat, lowCI.mat, uppCI.mat))
}
res1 <- cor.mtest(mtcars,0.95)
我们可以用带有 X
符号的那些统计上无关紧要的单元格绘制矩阵:
corrplot(M, p.mat = res1[[1]], sig.level=0.05)
此外,置信区间可以显示为:
corrplot(M, low=res1[[2]], upp=res1[[3]], order="hclust",
rect.col="navy", plotC="rect",cl.pos="n")
我想将以上两个图与以下操作结合起来:
1) 是否可以用颜色(例如深蓝色)绘制那些具有统计意义(而不是无关紧要)的单元格的背景?
2) 如何将矩阵的下三角部分绘制为 1),同时使用上三角部分显示置信区间?
关于你的第二个问题,你可以
绘制下三角:
corrplot(M, p.mat = res1[[1]], sig.level=0.05,
type='lower', tl.pos='lt')
和上一个:
corrplot(M, low=res1[[2]], upp=res1[[3]], order="hclust",
rect.col="navy", plotC="rect",cl.pos="n",
type='upper', tl.pos='n', add=T)
关于你的第一个问题,我不确定你的背景是什么意思(我还不能发表评论 - 所以我写在这里)。
编辑:根据 p 值设置每个正方形背景颜色的一种方法是为 bg 提供一个矩阵。这仅适用于 type="full"。对于三角形部分,必须进行调整,否则将使用未绘制的矩阵部分的颜色。
sig_level = 0.05
bg_colors <- res1[[1]] < sig_level
bg_colors[bg_colors == T] <- "yellow"
bg_colors[bg_colors == F] <- "white"
diag(bg_colors) <- "white" # if the diagonal values shall be white
# select colors from lower/upper part of matrix:
bg_colors_lower <- bg_colors[lower.tri(bg_colors, diag=T)]
bg_colors_upper <- bg_colors[upper.tri(bg_colors, diag=T)]
# lower triangle
corrplot(M, p.mat = res1[[1]], sig.level=sig_level,
type='lower', tl.pos='lt', bg=bg_colors_lower)
# upper triangle
corrplot(M, low=res1[[2]], upp=res1[[3]], order="hclust",
rect.col="navy", plotC="rect",cl.pos="n",
type='upper', tl.pos='n', add=T, bg=bg_colors_upper)
这给出:
我想操纵 R 包中的绘图 corrplot
。使用包中的以下示例:
library(corrplot)
data(mtcars)
M <- cor(mtcars)
cor.mtest <- function(mat, conf.level = 0.95){
mat <- as.matrix(mat)
n <- ncol(mat)
p.mat <- lowCI.mat <- uppCI.mat <- matrix(NA, n, n)
diag(p.mat) <- 0
diag(lowCI.mat) <- diag(uppCI.mat) <- 1
for(i in 1:(n-1)){
for(j in (i+1):n){
tmp <- cor.test(mat[,i], mat[,j], conf.level = conf.level)
p.mat[i,j] <- p.mat[j,i] <- tmp$p.value
lowCI.mat[i,j] <- lowCI.mat[j,i] <- tmp$conf.int[1]
uppCI.mat[i,j] <- uppCI.mat[j,i] <- tmp$conf.int[2]
}
}
return(list(p.mat, lowCI.mat, uppCI.mat))
}
res1 <- cor.mtest(mtcars,0.95)
我们可以用带有 X
符号的那些统计上无关紧要的单元格绘制矩阵:
corrplot(M, p.mat = res1[[1]], sig.level=0.05)
此外,置信区间可以显示为:
corrplot(M, low=res1[[2]], upp=res1[[3]], order="hclust",
rect.col="navy", plotC="rect",cl.pos="n")
我想将以上两个图与以下操作结合起来:
1) 是否可以用颜色(例如深蓝色)绘制那些具有统计意义(而不是无关紧要)的单元格的背景?
2) 如何将矩阵的下三角部分绘制为 1),同时使用上三角部分显示置信区间?
关于你的第二个问题,你可以 绘制下三角:
corrplot(M, p.mat = res1[[1]], sig.level=0.05,
type='lower', tl.pos='lt')
和上一个:
corrplot(M, low=res1[[2]], upp=res1[[3]], order="hclust",
rect.col="navy", plotC="rect",cl.pos="n",
type='upper', tl.pos='n', add=T)
关于你的第一个问题,我不确定你的背景是什么意思(我还不能发表评论 - 所以我写在这里)。
编辑:根据 p 值设置每个正方形背景颜色的一种方法是为 bg 提供一个矩阵。这仅适用于 type="full"。对于三角形部分,必须进行调整,否则将使用未绘制的矩阵部分的颜色。
sig_level = 0.05
bg_colors <- res1[[1]] < sig_level
bg_colors[bg_colors == T] <- "yellow"
bg_colors[bg_colors == F] <- "white"
diag(bg_colors) <- "white" # if the diagonal values shall be white
# select colors from lower/upper part of matrix:
bg_colors_lower <- bg_colors[lower.tri(bg_colors, diag=T)]
bg_colors_upper <- bg_colors[upper.tri(bg_colors, diag=T)]
# lower triangle
corrplot(M, p.mat = res1[[1]], sig.level=sig_level,
type='lower', tl.pos='lt', bg=bg_colors_lower)
# upper triangle
corrplot(M, low=res1[[2]], upp=res1[[3]], order="hclust",
rect.col="navy", plotC="rect",cl.pos="n",
type='upper', tl.pos='n', add=T, bg=bg_colors_upper)
这给出: