你如何绘制重叠的持续时间?

数据挖掘 可视化
2021-09-30 16:04:13

我的数据包含一组动作的开始时间和持续时间。我想绘制这个,以便在给定的时间片内我可以看到有多少动作是活动的。我目前将其视为 x 轴上的时间和 y 轴上的活动操作数的直方图。

我的问题是,我应该如何调整数据以便能够绘制?

一个动作的时间可以在 2 秒到 1 分钟之间。而且,在任何给定时间,我估计可能会发生大约 100 个动作。理想情况下,单个图将能够显示数小时的数据。数据的准确性以毫秒为单位。

在过去,我这样做的方式是计算每秒有多少动作开始、结束或处于活动状态。这给了我每秒活跃动作的计数。我发现这种技术的问题是很难调整我正在查看的时间片。查看一分钟的时间片很难计算,而查看不到一秒的时间片是不可能的。

我愿意接受有关如何考虑这个问题的任何建议。

提前致谢!

2个回答

既然你想展示这么多数据,我认为你最好的选择是互动。看看这个演示,它接近你想要的,但并不完全。

在单个图表中显示大量数据以及最精细的细节和鸟瞰图是非常困难的。但是您可以让用户进行交互并查找详细信息。要显示计数,一种选择是使用颜色编码。看看这张图片(这里的代码)图片:。

这里 rgb 通道已用于对不同大小的窗口的活动事件(红色)、事件开始(绿色)和事件结束(蓝色)的数量进行编码(对数)。X 轴是时间,Y 轴代表窗口大小,即持续时间。因此,坐标为 (10, 4) 的点表示从 10 到 14 的时间间隔。

为了使大量数据更加详细,最好使图表可缩放(就像之前的演示一样),并让用户可以仅可视化一个通道/幅度。

这可以在R使用中完成ggplot基于这个问题,可以使用此代码来完成limits绘图的日期范围在哪里。

tasks <- c("Task1", "Task2")
dfr <- data.frame(
name        = factor(tasks, levels = tasks),
start.date  = c("2014-08-07 09:03:25.815", "2014-08-07 09:03:25.956"),
end.date    = c("2014-08-07 09:03:28.300", "2014-08-07 09:03:30.409")
)

mdfr <- melt(dfr, measure.vars = c("start.date", "end.date"))


mdfr$time<-as.POSIXct(mdfr$value)

ggplot(mdfr, aes(time,name)) + 
geom_line(size = 6) +
xlab("") + ylab("") +
theme_bw()+
scale_x_datetime(breaks=date_breaks("2 sec"),
limits = as.POSIXct(c('2014-08-07 09:03:24','2014-08-07 09:03:29')))

在此处输入图像描述