【问题标题】:Plotting for on weekends and weekdays separately from time-series dataset与时间序列数据集分开绘制周末和工作日
【发布时间】:2019-11-02 05:29:19
【问题描述】:

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

我有两组数据,一组是温度数据,另一组是变电站周围的负载数据。我在一天的时间间隔内对它们进行了平均 使用 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 中使用子图。有谁知道如何绘制,在这种情况下,仅限周末。

【问题讨论】:

  • 您的字段正在使用单独的数据框(df、dt)。它们应该在一个数据框中,以便 ggplot 正确绘制。
  • 我已经将它们绘制在单独的数据框中。但是为了使这个工作,我必须将它们结合起来吗?

标签: r ggplot2 dplyr time-series


【解决方案1】:

包括可重现的数据:

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()

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多