Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将时间间隔绘制为段_R_Datetime_Ggplot2_Plot - Fatal编程技术网

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
对于每个
系统
,我想为每个
类型
的事件绘制不同颜色的片段序列,从
开始日期
结束日期
。例如,对于system
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
解决方案。

一个选项是使用抖动,以避免过度绘制起点和终点。这是否有效将取决于您尝试绘制的线段数量

为了确保能够将线的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())