2012-11-27 4 views
4

누적 막대에 백분율 수치를 표시하고 싶습니다. 그러나 한 그룹의 비율은 매우 낮습니다. 두 값이 서로 겹치고 있습니다. 나는 'postion ='identity '로 바뀐다. 아직도 ..... 모든 생각은 작동하지 않을까요?geom_text를 사용하여 누적 막 대형 차트의 값을 표시하는 방법은 무엇입니까?

x4.can.m <- structure(list(canopy = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("0%", "1 to 84%", 
"85% +"), class = "factor"), YearQuarter = structure(c(1L, 1L, 
1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L), .Label = c("2011-09-01", 
"2011-12-01", "2012-03-01", "2012-06-01", "2012-09-01"), class = "factor"), 
    value = c(0.51, 0.01, 0.48, 0.52, 0.01, 0.47, 0.53, 0.01, 
    0.47, 0.57, 0.01, 0.41, 0.61, 0.01, 0.38)), .Names = c("canopy", 
"YearQuarter", "value"), row.names = c(NA, -15L), class = "data.frame") 


x4.can.bar <- ggplot(data=x4.can.m, aes(x=factor(YearQuarter), y=value,fill=canopy)) + geom_bar(stat="identity",position = "stack",ymax=100) 

x4.can.bar+scale_y_continuous(formatter='percent')+ 
labs(y="Percentage",x="Year Quarter") + 
geom_text(aes(label =paste(round(value*100,0),"%",sep="")),size = 3, hjust = 0.5, vjust = 4,position ="identity") 

답변

7

하나의 솔루션은 회피에 스택 줄을 변경하는 일

x4.can.bar <- ggplot(data=x4.can.m, aes(x=factor(YearQuarter), y=value,fill=canopy)) + 
        geom_bar(stat="identity",position = "dodge",ymax=100) + 
      geom_text(aes(label =paste(round(value*100,0),"%",sep=""),ymax=0), 
         position=position_dodge(width=0.9), vjust=-0.25) 
x4.can.bar 
당신은 라벨의 위치에 대한 적절한 값을 지정해야합니다

enter image description here

11

- 당신은 외부에서이 작업을 수행하는 경우 ggplot 전화를 걸면 통화 중에 시도하는 것보다 훨씬 쉬울 것입니다.

누적 된 각 구성 요소의 중간 점을 찍으면됩니다.

plyrddply 사용이 너무 formatter 더 이상 scale_y_continuous에 유효한 인자이며, I는 ggplot2_0.9.2.1을 사용하고 각 YearQuarter

library(plyr) 
x4.can.m <- ddply(x4.can.m, .(YearQuarter), mutate, csum = cumsum(value)-value/2) 

x4.can.bar <- ggplot(data=x4.can.m, aes(x=factor(YearQuarter), y=value,fill=canopy)) + 
geom_bar(stat="identity",position = "stack",ymax=100) 

x4.can.bar + 
scale_y_continuous(expand = c(0,0), labels = percent) + 
labs(y="Percentage",x="Year Quarter")+ 
geom_text(aes(y = csum,label =paste(round(value*100,0),"%",sep="")), 
      size = 3, hjust = 1, vjust = 0) 

주 내에 절반 전류 값의 누적 합을 취하고 감산 같이 간단하지 , label = percent으로 대체되었습니다. this question를 참조 관련 링크

enter image description here

+2

난 당신의 솔루션을 선호합니다. – agstudy

+0

@mnel, 감사합니다. ggplot2_0.9.2.1로 업그레이드하는 가장 쉬운 방법은 무엇입니까? 나는 R_2.15.1을 여전히 사용하고있다 ..... –

+0

새로운 R 세션에서'install.packages ('ggplot2') '를 실행한다 – mnel

관련 문제