2015-09-15 1 views
2

J'essaie de visualiser un ensemble de données en utilisant ggpairs de la bibliothèque GGally dans R. Je veux avoir une diagonale avec des graphiques de densité de chaque variable séparés par une variable de regroupement. Je ne suis pas en mesure d'obtenir les bonnes parcelles en raison d'un problème d'échelle. Pour illustrer mon propos, je vais utiliser l'ensemble de données artificielle suivante:Echelle correcte des tracés de densité avec plusieurs groupes utilisant GGally dans R

group=as.numeric(cut(runif(100),c(0,1/2,1),c(1,2))) 
x=rnorm(100,group,1) 
x[group==1]=(x[group==1])^2 
y=2*x+rnorm(100,0,0.1) 
data=data.frame(group=as.factor(group),x=x,y=y) 

En utilisant ggpairs, je reçois l'intrigue suivante

library(ggplot2) 
library(GGally)  
ggpairs(data,columns = 2:3,colour="group") 

enter image description here

Maintenant, comparez la partie supérieure gauche du terrain diagramme de densité de la variable x obtenu en utilisant ggplot2 uni:

ggplot(data, aes(x = x, colour = group)) + geom_density() 

enter image description here

Nous pouvons voir que l'échelle y des courbes rouges et bleues dans ggpairs (la première figure) ne sont pas les mêmes, ce qui peut conduire à des conclusions trompeuses. Comment puis-je corriger ceci dans ggpairs?

+1

faites les parcelles individuelles vous-même et utilisez 'grille.arrange', peut-être, plutôt que de compter sur ggally? ou déposer un problème avec le mainteneur 'Barret Schloerke '? – hrbrmstr

Répondre

0

Voici la réponse des développeurs:

Vous avez raison. ils ne s'affichent pas correctement. :-(

Avec la sortie actuelle du CRAN, s'il vous plaît essayez ce qui suit ...

set.seed(1234) 
group = as.numeric(cut(runif(100),c(0,1/2,1),c(1,2))) 
x = rnorm(100,group,1) 
x[group == 1] = (x[group == 1])^2 
y = (2 * x) + rnorm(100,0,0.1) 
data = data.frame(group = as.factor(group), x = x, y = y) 

library(ggplot2) 
library(GGally)  

# # bad example 
# ggpairs(data,columns = 2:3,colour="group") 


ggally_correct_diag_densityDiag <- function(data, mapping, ...) { 
    # the color is corrected to fill by ggpairs 
    # to get desired output with color, it is changed back here. 
    if (! is.null(mapping$fill)) { 
    mapping$colour = mapping$fill 
    mapping$fill = NULL 
    } 

    ggplot(data, mapping) + geom_density(...) 
} 

ggpairs(data, columns = 2:3, colour = "group", diag = list(continuous = "correct_diag_density")) 

Jusqu'à la prochaine version, vous pouvez tirer parti du processus de eval de ggpairs. "ggally_FN_NAME" ou "ggally_FN_NAMEDiag" sont . les conventions d'appellation suivre la prochaine version permettra de soumission des fonctions personnalisées directement telles que:

ggpairs(data, columns = 2:3, colour = "group", diag = list(continuous = ggally_correct_diag_densityDiag)) 

Voir plus de détails dans leur github page