2017-09-27 12 views
0

g 백분율이 아닌 실제 백분율에 대해 데이터 레이블을 가져오고 ggplot2를 사용하여 R에 100 % 누적 막 대형 차트를 만들려고합니다. 제가 그렇게하려고 할 때, 그래프의 다른면에 레이블을 붙이는 방법으로 작은 막대를 얻습니다. 술집의 카운트가있는 일반 막대 차트를 얻을 수 있으며 여기에 이미 많은 질문이있는 것을 알고 있지만 백분율을 얻는 방법에 대해서는 알고 있지만 내가 원하는 것을 찾지 못했습니다. 이 일을하지만, 일부 모의 데이터는 유사하다 :100 % 스택 막대 차트 데이터 레이블 백분율이 아닙니다.

ggplot(dat, aes(x = assessment, y = N, fill = User)) + 
    geom_bar(stat = "identity") + 
    geom_text(aes(label = N), position = position_stack(vjust = 0.5)) + 
    coord_flip() 

막대 차트 & 라벨 :

내가 막대 차트와 데이터 레이블을 얻을 수있는이 코드

dat <- read.table(text = "assessment User N 
missingcomma Sara 5 
notcapitolized Sara 2 
noindent Sara 1 
missingcomma Jason 1 
notcapitolized Jason 3 
noindent Jason 4 
missingcomma Andre 3 
notcapitolized Andre 1 
noindenet Andre 2", header = TRUE) 

그리고이 코드를 사용하면 아무데도 중간에 내 레이블이있는 100 % 누적 형 차트를 얻을 수 있습니다./미친 라벨 w

ggplot(dat, aes(x = assessment, y = N, fill = User)) + 
    geom_bar(stat = "identity", position = "fill") + 
    geom_text(aes(label = N), position = position_stack(vjust = 0.5)) + 
    coord_flip() 

100 % 스택 차트 :

이 도와주세요, 그것은 매우 감사하겠습니다.

+0

이 귀하의 질문에 대답 했습니까? – treysp

답변

0

Ramnath의 답변에있는 "구 버전의 ggplot"부분에서 그룹별로 텍스트 위치를 계산해야한다고 생각합니다 : Showing data values on stacked bar chart in ggplot2.

ave() 함수 assessment 각 그룹이다 : 그들은 그 개의 각 카운트를 감산position = "fill"

  • 없었다면

    1. 적층 된 바의 총 높이를 계산하는 cumsum()을 사용하여,
    2. position = "fill"이 y 축 범위 [0, 1]
    3. 로 정규화되기 때문에 그룹의 총 개수로 정규화합니다.

    ggplot(dat) + geom_col(aes(x = assessment, y = N, fill = User), position = "fill") + geom_text(aes(x = assessment, y = ave(dat$N, dat$assessment, FUN = function(x) (cumsum(x) - 0.5 * x)/sum(x)), label = N)) + coord_flip()

    ggplot