ggpairs plot with heatmap of correlation values

前端 未结 2 1396
花落未央
花落未央 2020-12-06 11:33

My question is twofold;

I have a ggpairs plot with the default upper = list(continuous = cor) and I would like to colour the tiles by correlation values

2条回答
  •  -上瘾入骨i
    2020-12-06 12:11

    A possible solution is to get the list of colors from the ggcorr correlation matrix plot and to set these colors as background in the upper tiles of the ggpairs matrix of plots.

    library(GGally)   
    library(mvtnorm)
    # Generate data
    set.seed(1)
    n <- 100
    p <- 7
    A <- matrix(runif(p^2)*2-1, ncol=p) 
    Sigma <- cov2cor(t(A) %*% A)
    sample_df <- data.frame(rmvnorm(n, mean=rep(0,p), sigma=Sigma))
    colnames(sample_df) <- c("KUM", "MHP", "WEB", "OSH", "JAC", "WSW", "gaugings")
    
    # Matrix of plots
    p1 <- ggpairs(sample_df, lower = list(continuous = "smooth"))  
    # Correlation matrix plot
    p2 <- ggcorr(sample_df, label = TRUE, label_round = 2)
    

    The correlation matrix plot is:

    # Get list of colors from the correlation matrix plot
    library(ggplot2)
    g2 <- ggplotGrob(p2)
    colors <- g2$grobs[[6]]$children[[3]]$gp$fill
    
    # Change background color to tiles in the upper triangular matrix of plots 
    idx <- 1
    for (k1 in 1:(p-1)) {
      for (k2 in (k1+1):p) {
        plt <- getPlot(p1,k1,k2) +
         theme(panel.background = element_rect(fill = colors[idx], color="white"),
               panel.grid.major = element_line(color=colors[idx]))
        p1 <- putPlot(p1,plt,k1,k2)
        idx <- idx+1
    }
    }
    print(p1)
    

提交回复
热议问题