У меня есть следующий фрейм данных:
test_df <- structure(list(system = c("A", "B", "B", "C", "D", "B", "B",
"C", "B", "B", "A", "D", "D", "B", "E", NA, NA, "B", "A", "D"
), type = c(2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 1L,
2L, 1L, 1L, 2L, 2L, 1L, 1L), start_date = structure(c(16567,
16604, 16324, 16595, 16111, 17597, 16784, 16648, 16121, 16549,
16438, 16484, 15997, 16488, 16708, 16121, 16327, 16329, 17010,
16342), class = "Date"), end_date = structure(c(16995, 16984,
16661, 16909, 16414, 17843, 16990, 16853, 16323, 16751, 16622,
16665, 16154, 16624, 16839, 16251, 16456, 16456, 17134, 16458
), class = "Date"), event_duration = c(428, 380, 337, 314, 303,
246, 206, 205, 202, 202, 184, 181, 157, 136, 131, 130, 129, 127,
124, 116)), row.names = c(NA, -20L), class = c("tbl_df", "tbl",
"data.frame"))
test_df
#> system type start_date end_date event_duration
#> 1 A 2 2015-05-12 2016-07-13 428
#> 2 B 2 2015-06-18 2016-07-02 380
#> 3 B 2 2014-09-11 2015-08-14 337
#> 4 C 2 2015-06-09 2016-04-18 314
#> 5 D 1 2014-02-10 2014-12-10 303
#> 6 B 1 2018-03-07 2018-11-08 246
#> 7 B 1 2015-12-15 2016-07-08 206
#> 8 C 2 2015-08-01 2016-02-22 205
#> 9 B 1 2014-02-20 2014-09-10 202
#> 10 B 2 2015-04-24 2015-11-12 202
#> 11 A 2 2015-01-03 2015-07-06 184
#> 12 D 2 2015-02-18 2015-08-18 181
#> 13 D 1 2013-10-19 2014-03-25 157
#> 14 B 2 2015-02-22 2015-07-08 136
#> 15 E 1 2015-09-30 2016-02-08 131
#> 16 <NA> 1 2014-02-20 2014-06-30 130
#> 17 <NA> 2 2014-09-14 2015-01-21 129
#> 18 B 2 2014-09-16 2015-01-21 127
#> 19 A 1 2016-07-28 2016-11-29 124
#> 20 D 1 2014-09-29 2015-01-23 116
Для каждого system
я хотел бы построить разноцветные последовательности сегментов, для каждого type
события, начиная с start_date
и заканчиваяна end_date
.Например, для системы A
я хотел бы построить две последовательности сегментов:
- одна, соответствующая событиям типа 1, содержащая один сегмент, который начинается в
2016-07-28
и заканчиваетсяв 2016-11-29
- другой, соответствующий событиям типа 2, содержащий два сегмента, один из которых начинается в
2015-01-03
и заканчивается в 2015-07-06
, а другой начинается в 2015-05-12
и заканчивается в 2016-07-13
.Как видите, события в последовательности могут перекрываться.Я не уверен, как убедиться, что пользователь все еще может различать события: возможно, можно использовать стрелки или вертикальные черты или что-то еще, чтобы показать начало и конец события.
В идеале графики для каждой системы должны быть в разных аспектах, потому что я считаю, что наличие всех их в одном графике приведет к полному беспорядку (конечно, фактический кадр данных намного больше, чем этот примерный кадр данных).
Для системы B
у меня будет 3 сегмента, соответствующих событиям типа 1, 5, соответствующих событиям типа 2. И так далее.Как я могу создать сюжет, который я желаю?Я бы предпочел решение ggplot2
.