【问题标题】:Overlay timeseries lines from different years for the same site为同一站点覆盖不同年份的时间序列线
【发布时间】:2019-05-06 05:19:11
【问题描述】:

我想比较 3 年内同一地点的水位。所以我想在同一张图上绘制这 3 年。数据在春季每天收集两次,数据点的日期和时间使用 lubridate 以 POSIXct 日期格式存储。

例如:

library(lubridate)
yr <- c(rep("2012", 128), rep("2013", 136), rep("2014", 112))
mt <- c(c(rep("5", 62), rep("6", 60), rep("7", 6)),
        c(rep("5", 58), rep("6", 60), rep("7", 18)),
        c(rep("5", 50), rep("6", 60), rep("7", 2)))
dy <- c(c(rep(1:31, each = 2), rep(1:30, each = 2), rep(1:3, each = 2)),
        c(rep(3:31, each = 2), rep(1:30, each = 2), rep(1:9, each = 2)),
        c(rep(7:31, each = 2), rep(1:30, each = 2), rep(1, each = 2)))
hr <- c(rep(c("2:00", "14:00"), 64),
        rep(c("2:00", "14:00"), 68),
        rep(c("2:00", "14:00"), 56))
water.levels <- data.frame("Date" = ymd_hm(paste(yr, mt, dy, hr, sep = " ")),
                       "Levels" = runif(376, min = 0.8, max = 1.5))

当我绘制时,我在同一张图上得到三年,但作为一个连续的时间序列:

plot(water.levels, type = "l")

相反,我希望将它们叠加起来,因为这些数据都是在一年中的可比时间收集的。到目前为止,我还没有找到解决方案。

谢谢!

【问题讨论】:

  • IIRC,你想要一个 2012 年的 ts,一个 2013 年的,一个 2014 年的吗?
  • 是的,但都叠加在一张图中,如下所示:i.stack.imgur.com/4LqYa.png
  • 当您使用 "Date" = ymd_hm(paste(yr, mt, dy, hr, sep = " ") 时,您在 x 轴上指定年份,这使得年度系列显示在彼此相邻的时间线上。我建议您对所有系列使用一年,例如"Date" = ymd_hm(paste(2014, mt, dy, hr, sep = " ") 并将年份映射到颜色。
  • 啊哈!谢谢!行得通!

标签: r ggplot2 time-series lubridate


【解决方案1】:

感谢 Jon Spring,这是一个足够简单的解决方案:

water.levels <- data.frame("Date" = ymd_hm(paste(1970, mt, dy, hr, sep = " ")),
                           "Year" = yr,
                           "Levels" = runif(376, min = 0.8, max = 1.5))
library(ggplot2)
ggplot(water.levels, aes(Date, Levels, 
                         group = factor(Year), 
                         colour = factor(Year))) +
geom_line()

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 2023-03-12
    • 2020-04-25
    • 2017-11-26
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2017-11-15
    相关资源
    最近更新 更多