首页 > 解决方案 > R,将日期设置为通用日期和星期几

问题描述

美好的一天,我有一个数据集,其中包含过去一个月每周每一天的每个小时的值,我想将本周的值与前一周的值进行比较,并将它们放在图上。我使用以下代码创建日期格式;

WeekDate <- seq(from=as.POSIXct("2018-09-19 0:00", tz="UTC"),
to=as.POSIXct("2018-09-25 23:00", tz="UTC"), by="hour")

PreviousWeekDate <- seq(from=as.POSIXct("2018-09-12 0:00", tz="UTC"),
to=as.POSIXct("2018-09-18 23:00", tz="UTC"), by="hour")

我将它与我的值合并(我们可以使用 y1 = (0:167) 和 y2 = (1:168) 作为虚拟值)。

我用情节来获取图表

  plot_ly() %>%
add_lines(x = WeekDate, y = y1, name = "2018-09-19 to 2018-09-25") %>%
add_lines(x = PreviousWeekDate, y = y2, name = "2018-09-12 to 2018-09-19")

我想要做的是得到一个像下面这样的情节;周图

而不是我得到的那个;非重叠图

在 X 轴上,我想说的是;星期一 HH:MM,所以我可以直接将一个值与另一个值进行比较,从而指示我们正在查看的时间。我希望它们重叠。类似于将日期转换为通用周,没有实际的月/日。

我还没有找到任何东西,任何帮助将不胜感激。谢谢

标签: rdateggplot2plotlyr-plotly

解决方案


这可以通过从工具提示中隐藏“time_norm”数据来稍微清理一下,但我认为它基本上可以满足您的需求。

library(tidyverse); library(lubridate); library(plotly)
df <- data_frame(
  time = seq(from=as.POSIXct("2018-09-12 0:00", tz="UTC"),
                  to=as.POSIXct("2018-09-25 23:00", tz="UTC"), by="hour")) %>%
  rowid_to_column(var = "y") %>%
  mutate(week      = if_else(time > max(time) - ddays(7), "This week", "Last week"),
         time_norm = if_else(time > max(time) - ddays(7), time, time + ddays(7)))

ggplotly( 
  { 
  ggplot(df, aes(time_norm, y, color = week, label = norm)) +
  geom_line()
  }

推荐阅读