2016-09-14 5 views
1

잘못 :스택 geom_bar의 누적 막대와 문제 및 라벨 내가이 막대 차트를

group = c("A","A","B","B") 
value = c(25,-75,-40,-76) 
day = c(1,2,1,2) 
dat = data.frame(group = group , value = value, day = day) 

ggplot(data = dat, aes(x = group, y = value, fill = factor(day))) + 
    geom_bar(stat = "identity", position = "identity")+ 
    geom_text(aes(label = round(value,0)), color = "black", position = "stack") 

enter image description here

나는 나타나기 쌓아 바의 값을 싶습니다. 위의 코드를 실행할 때 -76이 올바른 위치에 있지 않으며 75도 보이지 않습니다.

번호를 올바른 위치에 표시하는 방법을 알려주세요. 음성 및 양성 값의 혼합 스태킹

+0

당신은 경고에주의를 기울여야한다 :'경고 메시지 : 잘 정의되지 스태킹을 때 Ymin를 = 0 '즉 당신이 혼란 그래프를 만들고있어!. – alistaire

+0

바를 쌓고 싶다면 왜'geom_bar'에서'position = "identity"를 사용하고 있습니까? – Axeman

+0

@alistaire, 나는'2.1.0.9000'을 실행하는 경고를 얻지 못하고있다. – Axeman

답변

1
ggplot(data=dat, aes(x=group, y=value, fill=factor(day))) + 
    geom_bar(stat="identity", position="identity")+ 
    geom_text(label =round(value,0),color = "black")+ 
    scale_y_continuous(breaks=c(-80,-40,0)) 

enter image description here

+1

OP는 "바가 쌓이는 것을 좋아합니다". 당신이 동의하지 않는다면, 적어도 그 대답을 설명해야합니다. – Axeman

0

ggplot2 어렵다. 가장 쉬운 방법은 데이터 세트를 양수와 음수에 대해 두 개로 나눈 다음 막대 레이어를 별도로 추가하는 것입니다. 고전적인 예는 here입니다.

양의 y 값에 하나의 텍스트 레이어를 추가하고 네거티브에 하나의 텍스트 레이어를 추가하여 텍스트와 동일한 작업을 수행 할 수 있습니다.

enter image description here

dat1 = subset(dat, value >= 0) 
dat2 = subset(dat, value < 0) 

ggplot(mapping = aes(x = group, y = value, fill = factor(day))) + 
    geom_bar(data = dat1, stat = "identity", position = "stack")+ 
    geom_bar(data = dat2, stat = "identity", position = "stack") + 
    geom_text(data = dat1, aes(label = round(value,0)), color = "black", position = "stack") + 
    geom_text(data = dat2, aes(label = round(value,0)), color = "black", position = "stack") 
ggplot2 (2.1.0.9000)의 현재 개발 버전을 사용하는 경우

, 스택은 음의 값을 geom_text에서 제대로 작동하지 않는 것 같습니다. 필요한 경우 언제든지 "손으로"텍스트 위치를 계산할 수 있습니다.

library(dplyr) 
dat2 = dat2 %>% 
    group_by(group) %>% 
    mutate(pos = cumsum(value)) 

ggplot(mapping = aes(x = group, y = value, fill = factor(day))) + 
    geom_bar(data = dat1, stat = "identity", position = "stack")+ 
    geom_bar(data = dat2, stat = "identity", position = "stack") + 
    geom_text(data = dat1, aes(label = round(value,0)), color = "black") + 
    geom_text(data = dat2, aes(label = round(value,0), y = pos), color = "black")