如何绘制两列"时间"这是R

时间:2015-07-20 21:53:57

标签: r plot

我是R编程的新手并试图学习一些基本的绘图。我有几个问题

我的数据框架如下所示

EVENT_TYPE   DATE           TIME_START    TIME_END
event A      9/18/2014      14:47:01      16:53:07
event B      9/18/2014      15:52:16      17:08:30
event A      9/18/2014      16:26:19      16:53:58
event C      9/20/2014      19:25:51      19:25:51
event B      9/23/2014       3:40:39       4:38:07
event D      9/25/2014       8:15:40       8:59:40

问题1。我想绘制从2014年9月18日到2014年9月23日的数据。如何在R中选择DATE范围?

问题2。我想在x轴上使用" TIME_START"在y轴和DATE(或月份列)上绘制EVENT_TYPE。和" TIME_END"绘制在图表上,以便我可以查看事件之间的比较。

我搜索了这类问题,但没有得到任何答案。

非常感谢任何形式的帮助。请帮助我学习R。

1 个答案:

答案 0 :(得分:2)

首先将您的开始和结束时间转换为R:

中的日期时间
x <- transform(x,
               start=as.POSIXct(paste(DATE, TIME_START), format='%m/%d/%Y %H:%M:%S'),
               end=as.POSIXct(paste(DATE, TIME_END), format='%m/%d/%Y %H:%M:%S'))

然后你可以使用ggplot并为时间轴上的每个事件绘制一个矩形:

  • x轴是日期时间
  • 从每个事件的开始到结束绘制一个矩形
  • 自定义yyend的原因是两个重叠 出现相同类型的事件(例如2014年9月18日的两个事件A) 在视觉上彼此分开。 (我想你可以用geom_bar()position="jitter"做类似的事情,但我不知道怎么做。
  • 订购y的原因只是在Y轴上将类似的事件组合在一起,如果您不希望它仅使用1:nrow(x)代替y
  • scale_y_discrete(breaks=NULL)只是为了抑制y数。您可以根据需要自定义它们。

,并提供:

library(ggplot2)
ggplot(transform(x, y=order(EVENT_TYPE, start)),
       aes(x=start, xend=end, y=y, yend=y, col=EVENT_TYPE)) +
  geom_segment(size=3) +
  scale_y_discrete(breaks=NULL)

enter image description here

如上所述,因为你的x轴非常大(跨越多天)并且每个事件只持续1-2个小时,你几乎看不到每个事件的栏。您将不得不考虑如何合理地显示您的数据,但这不是问题的关键。举个例子,如果你只看一下前三个事件就更清楚了:

x2 <- x[1:3,]
ggplot(transform(x2, y=order(EVENT_TYPE, start)),
       aes(x=start, xend=end, y=y, yend=y, col=EVENT_TYPE)) +
  geom_segment(size=3) +
  scale_y_discrete(breaks=NULL)

enter image description here