2017-07-11 1 views
1

Je souhaite tracer la distribution d'une variable par Classe et ajouter des lignes verticales indiquant les moyennes des sous-ensembles définis par chaque Classe et les colorant par Classe. Alors que je réussis à colorier les distributions par classe, les lignes verticales apparaissent en gris. Pour un exemple reproductible voir ci-dessous:Coloration des lignes verticales par classe dans ggplot

library(data.table) 
library(ggplot2) 
library(ggthemes) 

data(mtcars) 
setDT(mtcars) 
mtcars[, am := factor(am, levels = c(1, 0))] 
mean_data <- mtcars[, .(mu = mean(hp)), by = am] 

ggplot(mtcars, aes(x = hp, fill = am , color = am)) + 
    geom_histogram(aes(y=..density..), position="identity",alpha = 0.4) + guides(color = FALSE) + 
    geom_density (alpha = 0.5)+ 
    geom_vline(data = mean_data, xintercept = mean_data$mu, aes(color = as.factor(mean_data$am)), size = 2, alpha = 0.5) + 
    ggtitle("Hp by am") + scale_fill_discrete(labels=c("am" , "no am")) + 
    labs(fill = "Transmission") + theme_economist() 

Ce code rend l'intrigue suivante:

enter image description here

Vos conseils seront appréciés.

Répondre

2

Vous devez inclure la cartographie xintercept dans votre aes appel, de sorte que ggplot les cartes correctement toutes les esthétiques:

ggplot(mtcars, aes(x = hp, fill = am , color = am)) + 
    geom_histogram(aes(y=..density..), position="identity",alpha = 0.4) + guides(color = FALSE) + 
    geom_density (alpha = 0.5)+ 
    geom_vline(data = mean_data, aes(xintercept = mu, color = as.factor(am)), size = 2, alpha = 0.5) + 
    ggtitle("Hp by am") + scale_fill_discrete(labels=c("am" , "no am")) + 
    labs(fill = "Transmission") + theme_economist() 

Tout ce que vous mettez dans un appel geom qui est pas aes obtient traité comme unique valeur, et ne reçoit pas toutes les esthétiques cartographiées qui lui sont appliquées.