简体   繁体   中英

Manipulations with corrplot

I want to manipulate the plotting from the R package corrplot . With the following example from the package:

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)

we can plot out the matrix with those statistically insignificant cells with a X sign:

corrplot(M, p.mat = res1[[1]], sig.level=0.05)

In addition, the confidence intervals can be shown with:

corrplot(M, low=res1[[2]], upp=res1[[3]], order="hclust",
              rect.col="navy", plotC="rect",cl.pos="n")

I'd like to combine the above two plots with the following manipulations:

1) Is it possible to paint the background of those statistically significant (instead of insignificant) cells with a color (eg, deep blue)?

2) How to plot the lower triangular part of the matrix as 1) while using the upper triangular part to show the confidence intervals?

Regarding your 2nd question, you could plot the lower triangle:

corrplot(M, p.mat = res1[[1]], sig.level=0.05, 
        type='lower', tl.pos='lt')

and the upper one:

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)

Regarding your 1st question, I'm not sure what you mean with background (I can't make comments yet - so I write here).

EDIT: One way to set the background color of each square according to its p-value is to give a matrix for bg. This works only for type="full". For a triangle part this has to be adjusted, otherwise the colors will be used from the part of the matrix that is not plotted.

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)

This gives:

带有调整背景颜色和混合类型的 Corrplot

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM