geom_errorbar верхний для положительного среднего и нижний для отрицательного среднего

Я хотел бы построить полосы ошибок на моем графике geom_bar. Я знаю, что вы можете настроить aes (ymax, ymin), чтобы отображались только верхние или только нижние полосы.

Но у меня есть некоторые отрицательные и положительные средние значения, для которых я хотел бы показать полосы ошибок соответственно.

Вот пример кода и данных для игры

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

Спасибо -глубоко


person Deep    schedule 30.08.2016    source источник


Ответы (1)


Вы можете переопределить пределы, чтобы они были обусловлены средним_new (положительным или отрицательным):

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

Учитывая приведенное выше определение, вы получите следующий график:

введите описание изображения здесь

Можно удалить усы, которые касаются перекладины. Однако в настоящий момент я не могу понять, как это сделать.

person jav    schedule 31.08.2016
comment
Большое спасибо! это работает, и я создал черный прямоугольник вокруг полос, чтобы они выглядели более единообразно. geom_bar (stat = identity, color = black, position = dodge) - person Deep; 31.08.2016