2017-08-25 4 views
3

Ma question est double;graphique ggpairs avec heatmap des valeurs de corrélation

J'ai un graphique ggpairs avec la valeur par défaut upper = list(continuous = cor) et je voudrais colorer les carreaux par des valeurs de corrélation (exactement comme le fait ggcorr).

J'ai ceci: ggpairs plot of daily flows
Je voudrais que les valeurs de corrélation du tracé ci-dessus à colorer comme ceci: ggcorr heatmap of correlation values

library(GGally) 

sample_df <- data.frame(replicate(7,sample(0:5000,100))) 
colnames(sample_df) <- c("KUM", "MHP", "WEB", "OSH", "JAC", "WSW", "gaugings") 

ggpairs(sample_df, lower = list(continuous = "smooth")) 
ggcorr(sample_df, label = TRUE, label_round = 2) 

j'ai eu un bref aller à essayer d'utiliser upper = list(continuous = wrap(ggcorr) mais n'a pas eu un peu de chance et, étant donné que les deux fonctions retournent des appels de complot, je ne pense pas que ce soit le bon chemin?

Je suis conscient que je pourrais construire ceci dans ggplot (par exemple Sandy Muspratt's solution) mais étant donné que le paquet GGally a déjà la fonctionnalité que je cherche, j'ai pensé que je pourrais être en train de négliger quelque chose. Plus généralement, je voudrais savoir comment nous, ou si nous pouvons, appeler les valeurs de corrélation? Une option plus simple peut être de colorier les étiquettes plutôt que la mosaïque (this question en utilisant la couleur plutôt que la taille) mais j'ai besoin d'une variable à affecter à la couleur ...

Etre capable d'appeler les valeurs de corrélation à utiliser dans d'autres parcelles serait pratique bien que je suppose que je pourrais juste les recalculer moi-même.

Merci!

Répondre

4

Une solution possible consiste à obtenir la liste des couleurs à partir de la matrice de corrélation ggcorr et de définir ces couleurs comme arrière-plan dans les mosaïques supérieures de la matrice de tracés ggpairs.

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) 

Le tracé de la matrice de corrélation est la suivante:

enter image description here

# 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) 

enter image description here