2017-12-04 8 views
1

일년 중 특정 이벤트 수가 포함 된 간단한 막대 그래프를 그려 봅니다.데이터가 누락되었을 때 바 플롯 및 깔끔함 문제

> DPUT(all.events) 
structure(list(YEAR = c("1987", "1988", "1989", "1990", "1991", 
"1992", "1993", "1994", "1995", "1996", "1998", "2000", "2001", 
"2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009", 
"2010", "2011", "2013", "2015", "2016"), count = c(3L, 4L, 2L, 
3L, 1L, 2L, 6L, 1L, 7L, 1L, 6L, 1L, 2L, 3L, 3L, 4L, 1L, 1L, 1L, 
2L, 2L, 10L, 1L, 2L, 1L, 3L)), .Names = c("YEAR", "count"), row.names = c(NA, 
-26L), class = "data.frame") 

을 여기에 내 ggplot 스크립트입니다 : 다음은 데이터의 나는 complete 할 것이라고 기대하고 전에 경우에 무슨 짓을했는지 어떤

ggplot(tidyr::complete(all.events,YEAR,fill=list(count=0)), 
     aes(x=YEAR,y=count)) + 
geom_bar(stat="identity") + 
scale_y_continuous(limit=c(0,15),expand=c(0, 0)) + 
scale_x_discrete(breaks=c(1985,1990,1995,2000,2005,2010,2015), 
       labels=c(1985,1990,1995,2000,2005,2010,2015)) + 
theme_bw(base_size = 13) + 
xlab("") + ylab("No of events") 

, x 축에 따라 년 삽입하는 것입니다 축 또한 count = 0이다. 내가 얻을 줄거리는 하나 아래입니다에 해당하는 실종 년이 곳 개수 = 0 : 내가 잘못 뭐하는 거지

enter image description here

?

+3

'YEAR'을 숫자로 변경하십시오 :'all.events $ YEAR <- as.numeric (all.events $ YEAR)'. 'ggplot'은 연속/숫자가 아닌 절대적으로 취급합니다. – SymbolixAU

+0

그렇습니다.'YEAR'가 숫자 일 때'full_seq'를 사용하여 누락 된 연도를 모두 추가 할 수 있습니다 :'complete (all.events (YEAR = full_seq (YEAR, 1), fill = list (count = 0))' – aosmith

+0

엄밀히 말하면, 나는'date' 또는'datetime' 스케일을 사용하려고합니다. 주, 월 또는 연도별로 집계 할 때. 'as.integer (YEAR) '대신에'lubridate :: ymd (YEAR, truncated = 2L)'을 할 수 있습니다. 이점은 [다른 예] (https://stackoverflow.com/a/47619794/3817004)에서 더 잘 보입니다. – Uwe

답변

1

complete은 아무 것도없는 값을 생성하지 않습니다. ?complete에서 도움에서 :로, 그래서 그래서 year = 2010:2020 또는

year = full_seq(year) 같은 표현을 사용하려면 : 연속 변수의

, 당신은 데이터에 나타나지 않습니다 값을 입력해야 할 수도 있습니다 의견에 명시된 바와 같이 먼저 YEAR을 숫자로 변환해야하지만 핵심 사항은 전체 시퀀스가 ​​필요함을 지정하는 것입니다 (또는 수동으로 YEAR = 1987:2016).