【问题标题】:R: time series plot years and observations in order as they come in datasetR:时间序列在数据集中按顺序绘制年份和观察结果
【发布时间】:2021-10-24 01:27:12
【问题描述】:

我有一个数据集:

    TimeSeries <- data.frame(date=c("2013","2013","2013","2014","2014","2015","2015","2016", "2016","2017","2017"), 
                  score=c(-0.333, 0.500, 0.000, 0.333, -0.500, 0.777, -0.450, 0.667, -0.011, 0.111, -0.145))

现在我只想简单地将其绘制为时间序列,显示所有观察结果,每年。我只是代码:

ggplot(TimeSeries, aes(x = date, y = score)) + 
  geom_line() + scale_x_discrete(breaks = c(2013,2014,2015,2016))

这给了我以下信息:

但不是这个,我希望“2013”​​的观察结果在数据集中出现时按顺序排列,在 xas 上的“2013”​​和“2014”之间。因此,这将是一条从:-0.333 到 0.500 到 0.000 的线。其他年份和观察结果相同。它们需要按照它们在数据集中出现的顺序相互连接。所以首先是 2013 年的第一个,然后是第二个,等等。有人可以帮忙吗?

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    我建议将年份和观测值设为小数年份测量值,以便您可以从连续轴的便利中受益:

    library(dplyr)
    TimeSeries %>%
      group_by(date) %>%
      mutate(obs_num = row_number(),
             year_dec = as.numeric(date) + (obs_num - 1)/max(obs_num)) %>%
      ungroup() %>%
      
      ggplot(aes(year_dec, score)) +
      geom_line()
    

    【讨论】:

      【解决方案2】:

      您会发现 lubridate 包中的函数很有帮助。

      基本上,我们所做的是根据年份加上变量的顺序创建一个人工日期。顺序转换为十进制,然后添加到年份,并转换为实际日期进行绘图。

      TimeSeries %>% 
        mutate(date = as.numeric(date)) %>% 
        group_by(date) %>% 
        mutate(date_order = row_number()) %>% 
        mutate(n_in_year = n()) %>% 
        mutate(decimal = date_order / n_in_year) %>% 
        mutate(full_date_decimal = date + decimal) %>% 
        mutate(plot_date = date_decimal(full_date_decimal)) %>% 
        mutate(plot_date = as_date(plot_date)) %>% 
        ggplot(aes(x = plot_date, y = score)) +
        geom_line() +
        scale_x_date()
      

      【讨论】:

        猜你喜欢
        • 2020-11-25
        • 2018-01-23
        • 2021-03-14
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        • 2021-12-16
        • 2020-05-02
        • 2023-03-31
        相关资源
        最近更新 更多