R 将时间间隔绘制为段
我有以下数据帧:R 将时间间隔绘制为段,r,datetime,ggplot2,plot,R,Datetime,Ggplot2,Plot,我有以下数据帧: 测试\系统类型开始\日期结束\日期事件\持续时间 #>1A 2 2015-05-12 2016-07-13 428 #>2 B 2 2015-06-18 2016-07-02 380 #>3B2 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
测试\系统类型开始\日期结束\日期事件\持续时间
#>1A 2 2015-05-12 2016-07-13 428
#>2 B 2 2015-06-18 2016-07-02 380
#>3B2 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 1 2014-02-20 2014-06-30 130
#> 17 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
对于每个系统
,我想为每个类型
的事件绘制不同颜色的片段序列,从开始日期
到结束日期
。例如,对于systemA
,我想绘制两个段序列:
- 一个,对应于类型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
解决方案。一个选项是使用抖动,以避免过度绘制起点和终点。这是否有效将取决于您尝试绘制的线段数量
为了确保能够将线的y方向调整相同的量,可以将抖动添加到df本身,并使用该抖动来绘制线段:
test_df$jitter <- jitter(test_df$type, amount = 0.25)
ggplot(test_df) +
geom_segment(aes(x=start_date, xend=end_date, y=jitter, yend=jitter)) +
facet_wrap(~system) +
scale_y_continuous(breaks=c(1,2), labels=c(1,2)) +
theme(panel.grid.minor.y = element_blank())
ggplot(test_df) +
geom_point(aes(x=start_date, y=jitter), size=1) +
geom_segment(aes(x=start_date, xend=end_date, y=jitter, yend=jitter),
arrow=arrow(30,unit(1.25,"mm"),"last","closed")) +
facet_wrap(~system) +
scale_y_continuous(breaks=c(1,2), labels=c(1,2)) +
theme(panel.grid.minor.y = element_blank())