与时间序列数据集分开绘制周末和工作日

时间:2019-06-19 13:00:19

标签: r ggplot2 dplyr time-series

我希望从我的时间序列数据集中为工作日和周末创建两个单独的图

我有两组数据,一组用于温度,另一组用于变电站周围的负载。我已经将它们平均每天间隔一次 使用mutate和wday函数,我将每天变成一周中的几天。 “星期一,星期二”等。我在ggplot中绘制它时遇到了麻烦。我对R很陌生,所以它可能很简单。

#For weekend plot
date <- as.POSIXlt(BDR1DM$day, format = "%Y-%m-%d")
df %>%
  select(day, SSLoad) %>%
  mutate(weekend = wday(day, label = TRUE)) %>%
  filter(wday(day) %in% c(1,7))

day <- as.POSIXlt(HDDsumSS$date, format = "%Y-%m-%d")
date$wday
#day of week for Temp data
dt %>% 
  select(date, Temp) %>%
  mutate(weekend = wday(day, label = TRUE)) %>%
  filter(wday(day) %in% c(1,7))

ggplot() +
  aes(x= dt$Temp, y= df$SSLoad)+
  geom_point(data = subset(df, dayofweek$weekend == c("Sat", "Sun")))

我不确定是否在ggplot中使用子图。在这种情况下,没有人知道如何绘制图像吗?

2 个答案:

答案 0 :(得分:0)

包括可复制的数据:

library(dplyr)
library(ggplot2)
df <- data.frame(date = sample(seq(as.Date('2018/01/01'), 
as.Date('2019/01/01'), by="day"), 100),
                 SSLoad = runif(100,0,100),
                 Temp = runif(100,70,100))

您可以使用dplyr

进行过滤
df <- df %>%
  filter(weekdays(date)=="Saturday" | weekdays(date)=="Sunday") 

ggplot(df, aes(Temp, SSLoad)) + 
  geom_point()

或者,当您在ggplot中选择数据时,您可以进行子集

df <- df %>%
  mutate(weekend = (weekdays(date)=="Saturday" | weekdays(date)=="Sunday" ))

ggplot(df[df$weekend==T,], aes(Temp, SSLoad)) + 
  geom_point()

答案 1 :(得分:0)

首先,为什么您的字段位于不同的数据框中?我认为ggplot不能在一个图中使用两个单独的数据帧。此外,必须在aes()函数中指定作为源数据帧一部分的任何信息,因此您不应在geom_point函数中指定其他数据。要区分周末和工作日,可以使用dplyr软件包的过滤器功能:
df <- df %>% filter(weekdays(date)=="Saturday" | weekdays(date)=="Sunday")