2016-11-21 4 views
0

각 막대 세그먼트 중간에 geom_col 스택 된 barchart에 해당 값 레이블을 배치하고 싶습니다.geom_col의 각 막대 세그먼트 중간에 위치 geom_col 스택 된 barchart

그러나 내 순진한 시도는 실패합니다. 역시 도움이되지 않습니다 geom_text에 대한 y=value/2 설정을 분명히

library(ggplot2) # Version: ggplot2 2.2 

dta <- data.frame(group = c("A","A","A", 
          "B","B","B"), 
        sector = c("x","y","z", 
          "x","y","z"), 
        value = c(10,20,70, 
          30,20,50)) 

ggplot(data = dta) + 
    geom_col(aes(x = group, y = value, fill = sector)) + 
    geom_text(position="stack", 
      aes(x = group, y = value, label = value)) 

. 게다가, 텍스트의 순서가 바뀌 었습니다 (반대 방향).

어떤 (우아한) 아이디어를 어떻게 해결할 수 있습니까?

답변

4

geom_text에 그룹을 나타내려면 변수를 미적으로 매핑해야합니다. 당신에게 이것은 "섹터"변수입니다. 너 geom_text에있는 group의 미학과 함께 사용할 수 있습니다.

그런 다음 position_stackvjust을 사용하여 레이블을 가운데에 맞 춥니 다.

ggplot(data = dta) + 
    geom_col(aes(x = group, y = value, fill = sector)) + 
    geom_text(aes(x = group, y = value, label = value, group = sector), 
        position = position_stack(vjust = .5)) 

당신의 미학을 세계적으로 설정하여 타이핑을 줄일 수 있습니다. 그런 다음 을 geom_text의 그룹화 변수로 사용하고 group을 건너 뛸 수 있습니다.

ggplot(data = dta, aes(x = group, y = value, fill = sector)) + 
    geom_col() + 
    geom_text(aes(label = value), 
       position = position_stack(vjust = .5)) 

enter image description here