dodged barplot에 geom_text 위치 지정


96

제목을 자명하게 만들려고했지만 여기에 데이터가 먼저 있습니다.

dtf <- structure(list(variable = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 
4L, 4L, 5L, 5L), .Label = c("vma", "vla", "ia", "fma", "fla"), class = "factor"), 
    ustanova = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
    2L), .Label = c("srednja škola", "fakultet"), class = "factor"), 
    `(all)` = c(42.9542857142857, 38.7803203661327, 37.8996138996139, 
    33.7672811059908, 29.591439688716, 26.1890660592255, 27.9557692307692, 
    23.9426605504587, 33.2200772200772, 26.9493087557604)), .Names = c("variable", 
"ustanova", "(all)"), row.names = c(NA, 10L), class = c("cast_df", 
"data.frame"), idvars = c("variable", "ustanova"), rdimnames = list(
    structure(list(variable = structure(c(1L, 1L, 2L, 2L, 3L, 
    3L, 4L, 4L, 5L, 5L), .Label = c("vma", "vla", "ia", "fma", 
    "fla"), class = "factor"), ustanova = structure(c(1L, 2L, 
    1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("srednja škola", 
    "fakultet"), class = "factor")), .Names = c("variable", "ustanova"
    ), row.names = c("vma_srednja škola", "vma_fakultet", "vla_srednja škola", 
    "vla_fakultet", "ia_srednja škola", "ia_fakultet", "fma_srednja škola", 
    "fma_fakultet", "fla_srednja škola", "fla_fakultet"), class = "data.frame"), 
    structure(list(value = structure(1L, .Label = "(all)", class = "factor")), .Names = "value", row.names = "(all)", class = "data.frame")))

그리고 닷지 coord_flip된 막대 그래프를 만들고 막대 안에 텍스트 레이블을 넣고 싶습니다 .

ggplot(bar) + geom_bar(aes(variable, `(all)`, fill = ustanova), position = "dodge") +
 geom_text(aes(variable, `(all)`, label = sprintf("%2.1f", `(all)`)), position = "dodge") +
 coord_flip()

여기에서 출력을 볼 수 있습니다 .

여기에 이미지 설명 입력

나는 사소한 것을 요구하고 있다고 생각합니다. 텍스트 레이블이 누적 막대를 "따르도록"싶습니다. 레이블은 y 축에 올바르게 배치되지만 x 축에 올바르게 배치하는 방법은 무엇입니까?


네 ... 이걸 ggplot2 메일 링리스트에 올렸어야 했어요. 나는 교차 게시하고 싶지 않기 때문에 인내심 모자를 쓰고 @hadley가 무언가를 생각할 때까지 기다릴 것입니다! =)
aL3xa

내가 틀렸어. 그리고 분명히 ggplot 패키지에 대해 더 잘 알고 있어야합니다.
Joris Meys

답변:


154

이것이 당신이 원하는 것입니까?

ggplot(bar) + 
  geom_bar(aes(variable, `(all)`, fill = ustanova), position = "dodge") +
  geom_text(aes(variable, `(all)`, label = sprintf("%2.1f", `(all)`)), 
            position = position_dodge(width = 1)) + 
  coord_flip()

키는 매개 변수가없는 바로 가기 인 position = position_dodge(width = 1)대신 사용하는 것입니다 position = "dodge".

여기에 이미지 설명 입력


에서 ggplot2_2.0.0당신 몇 가지 예제를 찾을 ?geom_text방법이 위치에 geom_text회피 또는 스택 바에서 ( "라는 코드 덩어리 # Aligning labels and bars").하기 Q & A position_dodge의 폭 인수입니다 무엇? 주제에 대한보다 철저한 설명을 제공합니다.


1
정확히 내가 원하는 것! 나는 당신에게 맥주를 빚지고 있습니다! =)
aL3xa

2
그래서 이것을 자동화 할 방법이 없습니까? 항상 너비를 지정해야합니까?
vashts85

12
내가 추가 한 후이는 나를 위해 일한 fill = ustanovageom_text당신이 많은 수평 바있을 때, 특히 (어쩌면 유일한 X 당 3+ 바 필요) 감각과는 바입니다 같은 휴식의 수는 텍스트에 대해 동일해야한다 층 .
Alan

3
각면과 회피를 위해 이것은 유용한 답은 stackoverflow.com/a/26661791/1000343
타일러 스케이트 타는

@Alan 내가 stackoverflow에서 수행 한 모든 검색 중 귀하의 대답은 내 문제를 해결 한 유일한 것입니다.
Ga13
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.