один график чтобы был апрель к апрелю? Если так то просто в dataframe нужно создать колонку “period” от 1 до 4 и далее подавать это в aes(col = period)
Да, это я понимаю. А вот как этот period задать? В питоне есть f-строки (в R тоже есть отдельной библиотекой, но это странный путь, как я понимаю), там я могу подставить год и задать срез. А тут как быть?
Я бы в лоб делал что-то вроде этого: tibble(date = as.Date("1991-12-08") + 1:1200, value = rnorm(1200, 2, 1)) %>% mutate(month = month(date), year_indx = year(date) - 1991, period = if_else(month <= 3, year_indx, year_indx + 1)) %>% ggplot() + geom_line(aes(date, value)) + facet_wrap(~period, nrow = 4, scales = "free")
Посуточный режим несётся массу вопросов, связанных с синхронизацией осей х. - Года могут быть неполные. - Года могут быть високосные. - надо подумать, что делать с отсутствующими датами.
месячный тоже не лишен изъянов, собственно поэтому в росстате существует 101 способ учета сезонности... все зависит от контекста задачи, которого мы не знаем
С годом по месяцам проблем нет :)
это вопрос методический: - в феврале бывает 29 дней, а бывает 28 - в разных месяца - разное количество рабочих дней - что если внутри месяца не всегда собирались данные тогда "надо подумать, что делать с отсутствующими датами" технически проблем нет
Кстати, про произвольную годовую разбивку можно и напрямик с датами работать. Более для диалога, чем для для ответа на исходный вопрос. В исходной задаче я бы, может просто докинул еще пару месяцев в каждый фасет, чтобы все переходы декабрь-январь видеть (+2-3 месяца нового года). library(tidyverse) library(lubridate) set.seed(1) df <- tibble(date = as.Date("1991-12-08") + 1:1200, value = rnorm(1200, 2, 1)) # добавляем граничные столбы border_df <- range(df$date) %>% update(month = 4, day = 1) %>% {seq(from = .[[1]], to = .[[2]], by = "1 year")} %>% tibble(date = ., grp = seq_along(.)) bind_rows(df, border_df) %>% arrange(date) %>% fill(grp, .direction = "down") %>% # mutate(date = update(date, year = 2000)) %>% drop_na(value) %>% ggplot() + geom_line(aes(date, value)) + scale_x_date(breaks = scales::date_breaks("months"), labels = scales::date_format("%d.%m")) + facet_wrap(~grp, nrow = 4, scales = "free")
первый период конечно выглядит не очень красиво,но в целом идея понятна
ну там надо с NA разбираться. Что допустимо, что нет. Можно, но здесь нет нужды
Его просто можно удалить )))
NA может служить разделителем групп для lineplot. либо не морочиться и просто точки ставить.
вот, кроме tsibble был интересный пакет. и картинки тут как раз с апреля :) https://cran.r-project.org/web/packages/padr/vignettes/padr_custom.html В целом, блог автора компактный, но любопытный: https://edwinth.github.io/blog/padr-intro/
Обсуждают сегодня