2016-08-30 1 views
1

Je voudrais tracer des barres d'erreur sur mon tracé geom_bar. Je sais que vous pouvez ajuster aes (ymax, ymin) pour n'afficher que les barres supérieures ou inférieures. Mais, j'ai quelques valeurs moyennes négatives et positives pour lesquelles je voudrais montrer les barres d'erreur respectivement.geom_errorbar supérieure pour moyenne positive et inférieure pour moyenne négative

Voici quelques exemples de code et des données pour jouer avec

library(ggplot)  
myData <- aggregate(mtcars$mpg, 
         by = list(cyl = mtcars$cyl, gears = mtcars$gear), 
         FUN = function(x) c(mean = mean(x), sd = sd(x), 
              n = length(x))) 
    myData <- do.call(data.frame, myData) 
    myData$se <- myData$x.sd/sqrt(myData$x.n) 

colnames(myData) <- c("cyl", "gears", "mean", "sd", "n", "se") 
myData$names <- c(paste(myData$cyl, "cyl /", 
         myData$gears, " gear")) 

myData$sign <- c(1, -1, 1, 1, -1, 1, -1, 1) 

myDataN <- mutate(myData, mean_new = mean*sign, se_new=se+30) 
dodge <- position_dodge(width = 0.9) 
limits <- aes(
       ymax = myDataN$mean_new + myDataN$se_new, 
       ymin = myDataN$mean_new - myDataN$se_new) 
        #ymax = myDataN$mean_new, #for upper 
        #ymin = myDataN$mean_new) #for lower 


p <- ggplot(data = myDataN, aes(x = names, y = mean_new, fill = names)) 

p + geom_bar(stat = "identity", position = dodge) + 
    geom_errorbar(limits, position = dodge, width = 0.25) + 
    theme(axis.text.x=element_blank(), axis.ticks.x=element_blank(), 
     axis.title.x=element_blank()) 

Merci -deep

Répondre

2

Vous pouvez redéfinir les limites afin qu'elles sont subordonnées au mean_new (que ce soit positif ou négatif):

limits <- aes(
    ymax = myDataN$mean_new + (myDataN$mean_new > 0)*myDataN$se_new, 
    ymin = myDataN$mean_new - (myDataN$mean_new < 0)*myDataN$se_new) 

Compte tenu de la définition ci-dessus, vous obtenez la parcelle suivante:

enter image description here

Il peut être bon d'enlever la moustache qui touche la barre. Cependant, je suis incapable de comprendre comment faire pour le moment.

+1

Merci beaucoup! cela fonctionne et j'ai créé une boîte noire autour des barres afin qu'elles soient plus uniformes. geom_bar (stat = "identité", color = "black", position = esquive) – Deep