如何绘制按月和日平均的数据?
How to plot data averaged by month and day?
我想重现那个情节:
来自 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)
你很亲近!
for_plot 列的 class
只需两个小改动:
将月更改为每月获得一种颜色的因子
for_plot$month = as.factor(for_plot$month)
因为 weekday 是一个 character
ggplot 默认情况下会尝试将其排序为字符。为防止 weekday 转 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()
这给了你
我想重现那个情节:
来自 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)
你很亲近!
for_plot 列的 class
只需两个小改动:
将月更改为每月获得一种颜色的因子
for_plot$month = as.factor(for_plot$month)
因为 weekday 是一个 character
ggplot 默认情况下会尝试将其排序为字符。为防止 weekday 转 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()
这给了你