我认为这应该可行!方法是重塑数据,以便每次有一个值,包括在两次之间添加零值。然后您可以使用geom_step 进行绘图。这本身并不是真正的“条形图”,因为它们应该用于分类数据。您的数据看起来更像是在特定位置没有值的连续时间序列,因此我们只需为该序列构建正确的数据。
我认为添加权限行的步骤比他们应该做的更复杂 - 如果有人有改进建议请随意!
library(tidyverse)
tbl <- tribble(
~s1, ~s2, ~value,
"1/1/2018 12:00 AM", "1/1/2018 1:45 AM", 10.2,
"1/1/2018 2:00 AM", "1/1/2018 2:30 AM", 3.1
) %>%
mutate_at(vars(s1, s2), lubridate::dmy_hm) %>%
gather("s", "datetime", s1, s2) %>%
arrange(datetime)
tbl_1 <- tbl %>% bind_cols(id = group_indices(tbl, value))
tbl_2 <- tbl_1 %>%
group_by(id) %>%
summarise(datetime = last(datetime)) %>%
mutate(s = "s4", value = 0) %>%
bind_rows(tbl_1, .)
full_tbl <- tbl_2 %>%
group_by(id) %>%
summarise(datetime = first(datetime)) %>%
mutate(s = "s0", value = 0) %>%
bind_rows(., tbl_2) %>%
arrange(datetime, s)
print(full_tbl)
#> # A tibble: 8 x 4
#> id datetime s value
#> <int> <dttm> <chr> <dbl>
#> 1 2 2018-01-01 00:00:00 s0 0
#> 2 2 2018-01-01 00:00:00 s1 10.2
#> 3 2 2018-01-01 01:45:00 s2 10.2
#> 4 2 2018-01-01 01:45:00 s4 0
#> 5 1 2018-01-01 02:00:00 s0 0
#> 6 1 2018-01-01 02:00:00 s1 3.10
#> 7 1 2018-01-01 02:30:00 s2 3.10
#> 8 1 2018-01-01 02:30:00 s4 0
ggplot(data = full_tbl) + geom_step(aes(x = datetime, y = value))