2016-03-01 83 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

plo如果你想精确地复制它,你应该从'plot()'函数开始,也许使用'lines()'和'points()'的组合。否则,你试图复制的论文中的情节的哪些方面? –

回答

2

你非常接近! 只需两到for_plotclass变化不大:

变化个月至因素得到每月

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

相关问题