2016-02-09 2 views
2

С ggplot2 я хотел бы создать множитель (facet_grid), где каждый график является недельным значением счета за месяц.R ggplot по месяцам и группам значений по неделям

Мои данные, как это:

day_group count 
1 2012-04-29 140 
2 2012-05-06 12595 
3 2012-05-13 12506 
4 2012-05-20 14857 

Я создал для этого набора данных два других colums месяц и неделя на основе day_group:

day_group count Month Week 
1 2012-04-29 140 Apr 17 
2 2012-05-06 12595 May 18 
3 2012-05-13 12506 May 19 
4 2012-05-20 14857 May 2 

Теперь я хотел бы для каждого месяца создайте штрих-код, где у меня есть сумма значений счета, агрегированных по неделям. Так, например, в течение года у меня было бы 12 сюжетов с 4 барами (один раз в неделю).

Ниже то, что я использую для создания участка:

ggplot(data = count_by_day, aes(x=day_group, y=count)) + 
stat_summary(fun.y="sum", geom = "bar") + 
scale_x_date(date_breaks = "1 month", date_labels = "%B") + 
facet_grid(facets = Month ~ ., scales="free", margins = FALSE) 

До сих пор мой сюжет выглядит как этот https://dl.dropboxusercontent.com/u/96280295/Rplot.png

Как вы можете видеть ось й не так я ищу , Вместо того, чтобы показывать только недели 1, 2, 3 и 4, он отображает весь месяц.

Знаете ли вы, что я должен изменить, чтобы получить то, что я ищу?

Спасибо за вашу помощь

+0

Я все время создаю такие вещи, но я не понимаю, чего вы хотите. Например, обычно не 4 недели в месяц, но месяц распространяется почти всегда в течение 5 недель. –

+0

Привет, Майк, я согласен с вами в течение 4 или 5 недель. Моя идея состоит в том, чтобы просто группировать данные по неделям или по дням (от 1 до 30 или 31), если это проще). Что-то вроде этого https://dl.dropboxusercontent.com/u/96280295/r_group_by_week –

+0

Привет, Нико, Майк. Наконец, я смог сделать то, что искал (https://dl.dropboxusercontent.com/u/96280295/Rplot_datemonth.png). Единственное, что я не знаю, как это сделать, - это заказать месяц (январь, февраль и т. Д.) Вместо букв (a, b, c и т. Д.). –

ответ

1

Я думаю, что вы должны сделать это, но я не уверен, что я понимаю ваш вопрос:

ggplot(data = count_by_day, aes(x=Week, y=count, group= Month, color=Month)) 
3

Ладно, теперь, когда я вижу, что вы хотите, я написал небольшой чтобы проиллюстрировать его. Ключ к вашему заказу месяц проблемы делает месяце factor с уровнями в правильном порядке:

library(dplyr) 
library(ggplot2) 

#initialization 
set.seed(1234) 
sday <- as.Date("2012-01-01") 
eday <- as.Date("2012-07-31") 

# List of the first day of the months 
mfdays <- seq(sday,length.out=12,by="1 month") 

# list of months - this is key to keeping the order straight 
mlabs <- months(mfdays) 

# list of first weeks of the months 
mfweek <- trunc((mfdays-sday)/7) 
names(mfweek) <- mlabs 

# Generate a bunch of event-days, and then months, then week numbs in our range 
n <- 1000 
edf <-data.frame(date=sample(seq(sday,eday,by=1),n,T)) 
edf$month <- factor(months(edf$date),levels=mlabs) # use the factor in the right order 
edf$week <- 1 + as.integer(((edf$date-sday)/7) - mfweek[edf$month]) 

# Now summarize with dplyr 
ndf <- group_by(edf,month,week) %>% summarize(count = n()) 

ggplot(ndf) + geom_bar(aes(x=week,y=count),stat="identity") + facet_wrap(~month,nrow=1) 

Уступая:

enter image description here

(Как в стороне, я вроде горд, что сделал это без lubridate ...)