2013-11-26 9 views
1

나는 ggplot2 사용하여 간단한 줄거리를 할 노력하고있어 : 내가 바 위의 주석을 얻을 수 있도록막대 위에 geom_bar에 주석을 추가하는 방법은 무엇입니까?

library(ggplot2) 

ggplot(diamonds, aes(x = cut, y = depth)) + 
    geom_bar(stat = "identity", color = "blue") + 
    facet_wrap(~ color) + 
    geom_text(aes(x = cut, y = depth, label = cut, vjust = 0)) 

ggplot2 plot

어떻게이 플롯 주석을 달 수 있습니다? 이제 geom_text는 막대의 맨 아래에 레이블을 붙였습니다. 그러나이 막대 위에 레이블을 표시하고 싶습니다.

+0

http://stackoverflow.com/questions/10112587/re-alignment-of-numbers-on-the-individual-bars-with-ggplot2 – Ananta

+0

@jrara의 중복 가능성 난이이 일을 알고 있다면 최종 버전, 나는 플롯을 내보내고 발행인과 같은 프로그램에 주석을 달았습니다. – user1738753

답변

4

stat_summary()을 사용하면 depth의 합계로 y 값의 위치를 ​​계산하고 geom="text"을 사용하여 레이블을 추가 할 수 있습니다. 막대에 각 cut 값의 depth 값의 합이 표시되므로 합계가 사용됩니다.

바와 같이 stat="identity"이 바의 overploting을로 인한 문제를 만들기 때문에 y 값의 합계를 표시하는 대신 geom_bar()stat_summary()를 사용하는 것이 더 낫다 @joran에 의해 제안 음의 값이 될 경우 다음 줄이 음모의 부정적인 부분에 시작되며, 긍정적 인 부분으로 끝남 - 결과는 실제 값의 합이 아닐 것입니다.

ggplot(diamonds[1:100,], aes(x = cut, y = depth)) + 
    facet_wrap(~ color) + 
    stat_summary(fun.y = sum, geom="bar", fill = "blue", aes(label=cut, vjust = 0)) + 
    stat_summary(fun.y = sum, geom="text", aes(label=cut), vjust = 0) 

enter image description here

또한 미리 계산 깊이 값의 합은 당신이 stat="identity"geom_text()geom_bar()를 사용할 수 있습니다.

library(plyr) 
diamonds2<-ddply(diamonds,.(cut,color),summarise,depth=sum(depth)) 

ggplot(diamonds2,aes(x=cut,y=depth))+ 
    geom_bar(stat="identity",fill="blue")+ 
    geom_text(aes(label=cut),vjust=0,angle=45,hjust=0)+ 
    facet_wrap(~color) 
+0

처음에는'fill'보다는 bar에'color'를 사용하고'stat = "identity"때문에 수천장을 오버 플로팅하기 때문에 혼란 스러웠습니다. 그들은 견고하게 보입니다. 그러나 나는 그것이 너무 많기 때문에 그것이 환상이라고 생각합니다. 그것이 의도 된 것인지 확실하지 않은 경우 ... – joran

+0

예, 다이아몬드의 첫 번째 100 행을 서브 세트로 구성하면 막대가 파란색 외곽선이있는 많은 작은 부분으로 구성되어있는 것을 볼 수 있습니다. 나는 OP가 이것을 분명히해야한다고 생각합니다. –

+0

예, 의도하지 않았습니다.이 그래프를 만드는 올바른 방법은 무엇입니까? 어쩌면 stat_summary와 geom_text를 사용하고 있을까요? – jrara

관련 문제