Сдвиг шкалы R на дату оси x с непостоянной последовательностью времени - PullRequest
0 голосов
/ 05 мая 2019

У меня есть данные серии времени за два года подряд (2017-2018), с января по декабрь каждого года.Затем мне нужно отобразить данные с 17 сентября по 18 апреля.

Я мог бы сделать это с помощью очень ручного кода, однако я понимаю, что это можно сделать очень простым способом с помощью доступных сегодня пакетов.для управления датами на графиках (пакеты «весы», «lubridate» и т. д.)

Может ли кто-нибудь помочь мне упростить мою работу для выполнения второго графика?Я буду очень признателен.

  suppressWarnings(suppressMessages(library("tidyverse", quietly = T)))


  dat <- tibble(
    date = seq(as.Date("2017-01-01"), as.Date("2018-12-31"), by=1),
    var = rgamma(length(date), shape=2, scale=2)) %>% 
    mutate(year = lubridate::year(date),
           month = lubridate::month(date), 
           julian = lubridate::yday(date))
  dat
#> # A tibble: 730 x 5
#>    date         var  year month julian
#>    <date>     <dbl> <dbl> <dbl>  <dbl>
#>  1 2017-01-01 12.9   2017     1      1
#>  2 2017-01-02  6.69  2017     1      2
#>  3 2017-01-03  6.11  2017     1      3
#>  4 2017-01-04  1.68  2017     1      4
#>  5 2017-01-05  1.22  2017     1      5
#>  6 2017-01-06 10.2   2017     1      6
#>  7 2017-01-07  5.13  2017     1      7
#>  8 2017-01-08  4.61  2017     1      8
#>  9 2017-01-09  3.79  2017     1      9
#> 10 2017-01-10  1.11  2017     1     10
#> # … with 720 more rows

  dat %>%
    ggplot() +
    geom_line(aes(julian, var, color = factor(month), linetype=factor(year))) 

  dat %>%
    filter((year == 2017 & month %in% c("9","10", "11", "12"))|
             (year == 2018 & month %in% c("1", "2", "3"))) %>%
    mutate(julian_AWS = ifelse(julian>=244, julian-243, julian+123)) %>% 
    ggplot() +
    geom_line(aes(julian_AWS, var, color = factor(month), linetype=factor(year)))+
    scale_x_continuous(breaks = c(1,#S
                                  31,#O
                                  61,#N
                                  91,#D
                                  121,#E
                                  151,#F
                                  181),#M
                       labels = c("Sep", "Oct", "Nov", "Dec", "Jan", "Feb", "Mar"))+
    theme(axis.text.x=element_text(hjust=-1))

Создано в 2019-05-05 по представьте пакет (v0.2.1)

1 Ответ

1 голос
/ 05 мая 2019

Не думаю, что вам нужно углубляться в юлианские форматы дат. Посмотрите, получит ли это то, что вам нужно:

dat %>%
filter(date >= '2017-09-01', date < '2018-04-01') %>% 
ggplot() +
  geom_line(aes(date, var, color = factor(month), linetype = factor(year))) +
  scale_x_date(date_breaks = "1 month", date_labels = "%b") +
  theme(axis.text.x = element_text(hjust = -1))

enter image description here

Подробнее о форматах меток даты см. ?strftime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...