簡體   English   中英

R:時間序列 plot 年和按數據集中順序排列的觀察結果

[英]R: time series plot years and observations in order as they come in dataset

我有一個數據集:

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

現在我只想將 plot 作為一個時間序列,顯示每年的所有觀察結果。 我只是代碼:

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 年,然后是第二個,等等。有人可以幫忙嗎?

我建議將年份和觀測值設為小數年份測量值,以便您可以受益於連續軸的便利:

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

在此處輸入圖像描述

您會發現lubridate package 中的函數很有用。

基本上我們所做的是創建一個基於年份加上變量順序的人工日期。 訂單被轉換為十進制,然后添加到年份,並轉換為實際日期以進行繪圖。

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

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM