使用R(ggplot2)绘制时间序列的图表,每个时间点有多个值?

3

假设我有一些数据,包括我离开家的时间和到达工作地点所需的分钟数。 我将会有一些重复的值:

08:00, 20
08:04, 25
08:30, 40
08:20, 23
08:04, 22

有些数字会重复(比如08:04)。我想要做的是一个散点图,x轴可以正确缩放,同时允许每个条目有多个值,这样我就可以看到趋势。
时间序列是否是我想使用的?我已经能够绘制出一个时间序列图,其中每个时间只有一个值,并且我已经绘制出了多个值,但没有时间序列缩放。有人能够建议一个好的方法吗?ggplot2优先,但如果更容易的话,我会采用标准的R绘图。
1个回答

5

首先让我们准备一些更多的数据。

set.seed(123)
df <- data.frame(Time = paste0("08:", sample(35:55, 40, replace = TRUE)), 
                 Length = sample(20:50, 40, replace = TRUE), 
                 stringsAsFactors = FALSE)
df <- df[order(df$Time), ]
df$Attempt <- unlist(sapply(rle(df$Time)$lengths, function(i) 1:i))
df$Time <- as.POSIXct(df$Time, format = "%H:%M") # Fixing y axis
head(df)
    Time Length Attempt
6  08:35     24       1
18 08:35     43       2
35 08:35     34       3
15 08:37     37       1
30 08:38     33       1
38 08:39     38       1

我理解为您想保留相同出门时间的观测顺序。一开始我忽略了这一点,得到了以下散点图:

enter image description here

ggplot(data = df, aes(x = Length, y = Time)) + 
  geom_point(aes(size = Length, colour = Length)) + 
  geom_path(aes(group = Time, colour = Length), alpha = I(1/3)) + 
  scale_size(range = c(2, 7)) + theme(legend.position = 'none')

但是考虑到三个维度(时间长度尝试次数),散点图已经不能展示所有信息了。我希望我理解得正确,这就是您想要的:

图片描述

ggplot(data = df, aes(y = Time, x = Attempt)) + geom_tile(aes(fill = Length))

这很接近,但是图表的y轴没有随时间进行缩放。看起来相隔1分钟,但是您可以看到8:51紧挨着8:53(8:41和8:43同理)。 - Dave
@Dave,我添加了一行代码来修复它,并更新了两个图像。 - Julius Vainora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接