2017-09-05 3 views
1

다음 데이터 프레임의 경우 ggplot을 사용하여 몇 개의 막대 그림을 만들고 싶습니다.geom_bar의 막대의 너비가 같지 않음

df <- data.frame(Disease = c("Disease1","Disease2","Disease3","Disease3","Disease3","Disease4","Disease5","Disease5","Disease6","Disease4","Disease2","Disease2","Disease1","Disease7","Disease1","Disease1","Disease7","Disease6","Disease3","Disease6"), 
        Week = c(3,52,46,47,19,39,42,46,44,45,46,42,45,48,44,44,43,42,45,47), 
        Year = c(2015,2015,2015,2016,2015,2015,2016,2016,2015,2015,2015,2015,2016,2016,2016,2015,2016,2016,2016,2015), 
        Number = c(1,1,6,5,1,1,4,12,4,15,6,15,6,11,4,2,9,1,4,1)) 

다음 구문을 사용하면 막대 그래프가 여러 개 표시됩니다.

enter image description here

ggplot(df, aes(factor(Week), Number)) + 
    geom_bar(stat="identity" , aes(fill = factor(Year)), position = "dodge") + 
    facet_wrap(~ Disease, ncol = 2, scales = "free_y") + 
    labs(x = "Week", y = "Number") + 
    scale_fill_discrete(name = "Year") 

그러나, 나는 같은 폭 (폭의 차이를 질병 1 참조)이 모든 개주세요. 나는 이미 여기에 대답을 발견했다 Bars in geom_bar have unwanted different widths when using facet_wrap 그러나 나는 이것을 나의 예제에서 작동시키지 못한다. 누구든지 내 문제에 대한 해결책을 가지고 있습니까? 분명히, 내 원본 데이터 세트가 훨씬 크고 위의 예제보다 다른 막대 너비의 문제가 훨씬 더 자주 발생합니다.

답변

3

:

library(tidyverse) 
df2 = df %>% 
    complete(Disease, Week, Year, fill = list(Number = 0)) 

ggplot(df2, aes(factor(Week), Number)) + 
    geom_bar(stat="identity" , aes(fill = factor(Year)), position = "dodge") + 
    facet_wrap(~ Disease, ncol = 2, scales = "free_y") + 
    labs(x = "Week", y = "Number") + 
    scale_fill_discrete(name = "Year") 

또한 그래서 당신이 얻을 0.1와 같은 소수의 작성을 시도 할 수 각 x 축 위치의 작은 막대 - 각 막대에 공간이 있다는 것을 분명히하는 데 도움이 될 수 있지만 가짜 값을 혼동시킬 수 있다고 생각합니다.

df2 = df %>% 
    complete(Disease, Week, Year, fill = list(Number = 0.1)) 
+0

감사합니다! 내 전체 데이터 세트 (일부 막대는 여전히 더 넓었습니다)에서는 완벽하게 작동하지 않았지만 구문을 df2 <- df %> % group_by (Disease) %> % 완료 (주, 연도, 채우기 = 목록 (번호 = 0))로 변경 한 후 일하다 –

0

정상입니다. x 축에서 모든 유닛의 축에 같은 공간 (여기서는 1 주)이 있습니다.

2015 년, 2016 년, 아무도 또는 두 가지 모두가있는 주가 있습니다. 두 해가 모두있는 경우 1 년 단위의 경우와 동일합니다. 그래서 두 해 모두 음모를 꾸미는 경우, "단위체를위한 공간"은 두 개로 나뉘어 지므로 두 배 더 작은 막대가 나옵니다.

"문제"는 facet_wrap에 없지만 바를 옆으로 나란히 놓는 position = "dodge"로 인해 발생합니다.

콜린

당신은 각 질병 + 주 + 연도에 대한 0 데이터 집합을 작성하여이 문제를 해결할 수 있습니다
관련 문제