首页 > 解决方案 > 如何在一张图中绘制多个每日时间序列

问题描述

我有 27 天的时间序列数据(从 2018 年 4 月 9 日到 2018 年 5 月 15 日,没有周末),每天有 7 次观察(08:00 t0 20:00 每两小时),每个观察有两个变量(di 和 eu )。我想在一个图中将所有天绘制为线图。

我找到了每天使用 ggplot 平面图绘制一个图的解决方案,并且我找到了在一个图中绘制整个时间序列的解决方案(从 2018 年 4 月 9 日到 2018 年 5 月 15 日的 di 和 eu)。但是没有什么能让我在一个 8:00 到 20:00 的图中为一个变量叠加 27 个每日图。

前三天作为 dput() 的示例数据:

structure(list(date_time = structure(c(1523260800, 1523268000, 
1523275200, 1523282400, 1523289600, 1523296800, 1523304000, 1523347200, 
1523354400, 1523361600, 1523368800, 1523376000, 1523383200, 1523390400, 
1523433600, 1523440800, 1523448000, 1523455200, 1523462400, 1523469600, 
1523476800), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
di = c(75, 90, 35, 70, 75, 15, 5, 65, 55, 15, 15, 0, NA, 
15, 55, 55, 5, 25, NA, 60, NA), eu = c(15, 0, 65, 30, 15, 
65, 70, 40, 45, 75, 75, 100, NA, 85, 45, 30, 90, 65, NA, 
20, NA)), row.names = c(NA, -21L), class = c("tbl_df", "tbl", 
"data.frame"))

一个情节中包含所有 27 天的情节可能看起来令人困惑,但我喜欢尝试一下,看看它是否使数据趋势明显。每个工作日的情节将是一个很好的补充。

标签: rplot

解决方案


您可以预先确定dayand hour,然后使用相应的组进行绘图,如下所示:

library(tidyverse)
library(lubridate)

df %>%
  gather(metric, value, -date_time) %>%
  mutate(
    hour_of_day = hour(date_time),
    day = day(date_time)
  ) %>%
  ggplot(aes(x = hour_of_day, y = value)) +
  geom_line(aes(group = day)) +
  facet_wrap( ~ metric)

阴谋


推荐阅读