2016-08-30 5 views
1

geom_bar 플롯에 오류 막대를 표시하고 싶습니다. 위 또는 아래 막대 만 표시하도록 aes (ymax, ymin)를 조정할 수 있다는 것을 알고 있습니다.geom_errorbar는 음의 평균에 대해서는 upper이고 음의 평균에 대해서는 lower입니다.

하지만 오류 막대를 각각 표시하고자하는 음수 및 양수 평균값이 있습니다. 여기

는 일부 샘플 코드와 데이터가

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

감사 으로 재생하는 것입니다 - 깊은

답변

2

그들은 그것이 긍정적인지합니다 (mean_new에 조건이되도록 당신은 한계를 다시 정의 할 수 있습니다 또는) 부정적 :

01 : 위의 정의 감안할 때

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

, 당신은 다음과 같은 그래프를 얻을

enter image description here

막대에 닿은 수염을 제거하는 것이 좋습니다. 그러나, 나는 이것을 지금 어떻게하는지 알아낼 수 없다.

+1

정말 고마워요! 이 작품과 나는 더 균일하게 보이도록 술집 주위에 블랙 박스를 만들었습니다. geom_bar (stat = "identity", color = "black", 위치 = 닷지) – Deep