У меня есть данные временных рядов за 2000-2018 годы, с января по декабрь каждого года.Я хочу перекрыть линии средних значений temp_mean за период 2000-2016 и наблюдаемого temp_mean 2017-2018.
Я мог бы сделать это с помощью очень ручного кода, однако я понимаю, что это можно сделать очень простым способом с помощью пакетов, доступных сегодня для управления датами на графиках (пакеты "scale", "lubridate" и т. Д..)
Может ли кто-нибудь помочь мне упростить мою работу для составления сюжета?Я действительно ценю это.
suppressWarnings(suppressMessages(library("tidyverse", quietly = T)))
dat <- tibble(
date = seq(as.Date("2010-01-01"), as.Date("2018-12-31"), by=1),
tmean = rgamma(length(date), shape=2, scale=2)) %>%
mutate(year = lubridate::year(date),
month = lubridate::month(date),
julian = lubridate::yday(date))
# calculate daily average temperature for the serie 2010-2016
dat_serie <- dat %>%
filter(year<2017) %>%
group_by(julian) %>%
summarise(
month = first(month),
avg = mean(tmean, .2, na.rm = T)) %>%
ungroup()
p0 <- dat_serie %>%
filter(month %in% c("1", "2", "3", "9","10", "11", "12")) %>%
mutate(julian_AWS = ifelse(julian>=244, julian-243, julian+123)) %>%
ggplot() +
geom_line(aes(julian_AWS, avg, color = factor(month)))+
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))
Моя главная задача - как сопоставить значения серии и 2017-2018 гг. По оси X для наложения значений y.С некоторой помощью от здесь я добавил строку 2017-2018:
dat_17_18 <- dat %>%
filter(date >= '2017-09-01', date < '2018-03-30') %>%
mutate(julian_AWS = ifelse(julian>=244, julian-243, julian+123))
p0 + geom_line(data = dat_17_18,
aes(julian_AWS, tmean, linetype = factor(year)))
Создано в 2019-05-05 пользователем представительный пакет (v0.2.1)