在ggplot

时间:2018-01-31 14:59:58

标签: r ggplot2 weekday

我有一个包含事件的数据集。这些事件具有开始时间和持续时间。我想创建一个散点图,其中x轴为开始时间,y轴为持续时间,但我想改变x轴,以便显示一周的过程。也就是说,我希望x轴在星期一00:00开始,并在星期日23:59运行。

我在网上找到的所有解决方案都告诉我如何在工作日逐个进行分组,这不是我想要做的。我想单独绘制所有数据点,我只想将日期轴减少到工作日和时间。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这可以满足您的需求。它的作用是通过在一周内放置每个观察值来创建一个新变量,然后以必要的格式生成散点图。

library(lubridate)
library(dplyr)

set.seed(1)
tmp <- data.frame(st_time = mdy("01-01-2018") + minutes(sample(1e5, size = 100))) 
tmp <- tmp %>% 
    mutate(st_week = floor_date(st_time, unit = 'week')) %>% # calculate the start of week
    mutate(st_time_inweek = st_time - st_week) %>% # calculate the time elapsed from the start of the week
    mutate(st_time_all_in_oneweek = st_week[1] + st_time_inweek) %>% # put every obs in one week
    mutate(duration = runif(100, 0, 100)) # generate a random duration variable

这是如何生成情节的。部分"%a %H:%M:%S"可能只是"%a",因为时间部分不提供信息。

library(ggplot2)
ggplot(tmp) + aes(x = st_time_all_in_oneweek, y = duration) +
    geom_point() + scale_x_datetime(date_labels = "%a %H:%M:%S", date_breaks = "1 day")

使用"%a"时,情节如下:

enter image description here