【问题标题】:Plots in R (ggplot2) for time series with multiple values per time?在 R (ggplot2) 中绘制每次具有多个值的时间序列?
【发布时间】:2012-09-11 17:40:48
【问题描述】:

假设我的数据包括我离开家的时间和上班所需的分钟数。我会有一些重复的值:

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

有些数字会重复(例如 08:04)。我想要做的是运行一个散点图,该散点图在 x 轴上正确缩放,但每个条目允许这些多个值,以便我可以查看趋势。

时间序列是我想要使用的吗?我已经能够绘制一个每次具有一个值的时间序列图,并且我已经绘制了多个值,但没有时间序列缩放。任何人都可以提出一个好的方法吗?偏好 ggplot2,但如果更容易,我会采用标准 R 绘图。

【问题讨论】:

    标签: r ggplot2 time-series


    【解决方案1】:

    首先让我们准备更多数据

    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
    

    据我了解,您希望保留同一离家时间的观察顺序。起初我忽略了这一点,得到了一个像这样的散点图:

    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')
    

    但考虑到三个维度(TimeLengthAttempt)散点图不再能够向我们展示所有信息。我希望我理解正确,这就是你要找的:

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

    【讨论】:

    • 这很接近,但图表没有按时间缩放 y 轴。事情看起来相隔 1 分钟,但您会看到 8:51 就在 8:53 旁边(8:41 和 8:43 同上)。
    • @Dave,我又添加了一行来解决这个问题并更新了两张图片。
    猜你喜欢
    • 2023-02-07
    • 2013-01-30
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    相关资源
    最近更新 更多