2014-10-23 4 views
1

날짜 및 계산 열이있는 데이터 프레임이 있습니다. 연도와 월을 표시하는 x 축과 적절한 기간에 해당하는 행의 합계를 표시하는 y 축을 사용하여 막 대형 차트를 작성해야합니다.누락 된 값이있는 년 누적 데이터를 그려야합니다.

data <- data.frame(Date = as.Date(c("01/01/2014","02/01/2014","03/03/2014","07/08/2014","08/08/2014","09/08/2014","10/10/2014"), "%d/%m/%Y")) 

x <- as.Date(data$Date) 
y <- sample(10, length(x)) 
tmp <- data.frame(dt = format(x, "%Y-%m"), cnt = y, stringsAsFactors = FALSE) 

# # Pre-Allocate the table 
# minYr = min(as.numeric(strftime(data$Date, "%Y"))) 
# maxYr = min(as.numeric(strftime(data$Date, "%Y"))) 
# # The table will contain the number of months in a year. 
# n <- (maxYr - minYr + 1) * 12 
# dt <- character(n) 
# cnt <- numeric(n) 
# for (i in minYr:maxYr) { 
#  for (j in c("01","02","03","04","05","06","07","08","09","10","11","12")) { 
#   lev <- (i - minYr) * 12 + as.numeric(j) 
#   dt[lev] <- paste0(as.character(i),"-",j,"-01") 
#   cnt[lev] <- 0 
#  } 
# } 
# dt = as.Date(dt, format="%Y-%m-%d") 
# tmp <- data.frame(dt = format(dt, "%Y-%m"), cnt, stringsAsFactors = FALSE) 
# tmp <- rbind(tmp, data.frame(dt = format(x, "%Y-%m"), cnt = y, stringsAsFactors = FALSE)) 
# 

tmp2 <- aggregate(cnt ~ dt, tmp, sum) 

g <- ggplot(tmp2, (aes(x = dt, y = cnt))) 
g + geom_bar(stat="identity") 

위의 코드는 데이터를 표시하지만 특정 월의 트랜잭션이없는 경우에는 표시되지 않습니다. 차트에 누락 된 월을 0으로 표시하려고합니다.

주목할만한 코드 덩어리는 마침표가 0으로 매월 미리 할당되고 나에게 원하는 답을 제공하지만 ggplot 기능을 내장하여 회피 할 수 있는지 궁금합니다.

답변

0

이렇게하려면 scale_x_date을 사용할 수 있습니다. 그러나 x 변수를 Date 클래스로 변경해야합니다.

library(scales) 
g <- ggplot(tmp2, (aes(x = as.Date(paste0(dt, '-01')), y = cnt))) 
g + geom_bar(stat="identity") + 
    scale_x_date(name='dt', breaks = date_breaks("month"), labels = date_format('%Y-%m')) 

편집 : 그것을 확인하려면 scale_x_date 인수에

g + geom_bar(stat="identity", width=28) + 
    scale_x_date(name='dt', breaks = date_breaks("month"), labels = date_format('%Y-%m')) 

그리고 물론 당신은 또한 추가 할 수 제한 : 바의 원하는 폭을 얻으려면, 당신은 width 인수 geom_bar을 추가 할 수 원하는 위치에서 시작하고 끝내십시오 :

g + geom_bar(stat="identity", width=28) + 
    scale_x_date(name='dt', 
       breaks = date_breaks("month"), 
       labels = date_format('%Y-%m'), 
       limits=as.Date(c('2014-01-01', '2014-12-01'))) 
+0

감사합니다. 이것은 원래 코드 [IMG] http://i.imgur.com/MIEBBqW.jpg [/ IMG]를 실행하면 나올 수 있지만 이것이 scale_x_date [IMG] http : //를 사용할 때 나오는 내용입니다 i.imgur.com/ht4xBGh.jpg[/IMG]. 바의 두께가 일정하지 않음을 발견했습니다. – chribonn

관련 문제