2016-03-01 2 views
0

Я хотел бы воспроизвести этот сюжет:Как построить данные, усредненные по месяцам и дням?

link

из link

Я почти в состоянии сделать это, но я что-то пропустила:

library(lubridate) 
library(ggplot2) 
# get the data 
dates <- seq(as.Date("2012-01-01"), as.Date("2014-12-30"), by = 1) 
series <- seq(from = 1, to = 1095, by = 1) 
df<-data.frame(dates,series) 

# for aggregation 
df$month<-as.numeric(format(df$date, "%m")) 
df$week<-week(as.POSIXct(df$date)) 
df$weekday<-weekdays(as.POSIXct(df$date)) 
df$days<-as.numeric(format(df$date, "%d")) 
df$week_days<-as.numeric(format(df$date, "%w")) 

# for plotting 
for_plot=aggregate(series ~ + weekday+ month, data =df, FUN=mean) 


ggplot(for_plot, aes(x=weekday, y=series)) + geom_line(aes(group=month, color=month),size=2,alpha=0.5) 

enter image description here

+0

Площадь земельного участка t из статьи была создана с использованием Base R. Если вы хотите точно ее воспроизвести, вы должны начать с функции 'plot()' и, возможно, использовать комбинацию 'lines()' и 'points()'. В противном случае, какие аспекты сюжета из статьи вы пытаетесь дублировать? –

ответ

2

Вы очень близки! всего две небольшие изменений в class из for_plot колонка:

Изменения месяца фактора, чтобы получить один цвет в месяц

for_plot$month = as.factor(for_plot$month) 

Как буднего является character ggplot по умолчанию попыток сортировать его как символы. Чтобы предотвратить этот поворот в будний день в factor и укажите уровни.

for_plot$weekday = factor(for_plot$weekday, 
     levels = c("Monday", "Thursday", "Tuesday", "Wednesday", "Friday", "Saturday", "Sunday")) 

Как запустить R с немецкой локали вы делаете это сделать на немецком языке, так levels=c("Montag",...,"Sonntag")

Чтобы получить точки на линии просто добавить geom_point следующим образом:

ggplot(for_plot, aes(weekday, series, group=month, col=month)) + 
    geom_line() + 
    geom_point() 

Этот дает вам

enter image description here

+0

Надеюсь, что не слишком сильно вас беспокоит, но есть ли способ, ярлык, создать тот же сюжет только на 2013 год, а не на полный период? Спасибо! – Mamba

+0

Вы можете сделать 'df_2013 <- df [year (df $ dates) == 2013]', а затем агрегировать 'df_2013' – Rentrop

Смежные вопросы