我是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。
答案 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并为时间轴上的每个事件绘制一个矩形:
y
和yend
的原因是两个重叠
出现相同类型的事件(例如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)
如上所述,因为你的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)