фиктивные данные:
library(tidyverse)
df<-tibble(datetime=seq(as.POSIXct("2019-10-01 12:00:00"),as.POSIXct("2020-10-01 12:00:00"), by = "15 min"),value=rnorm(35137,22,sd=1)) %>%
mutate(period=case_when(
datetime> = "2019-10-01" & datetime< = "2019-12-31" ~ "Oct 1-Dec 31, 2019",
datetime>"2019-12-31" & datetime< = "2020-03-31" ~ "Jan 1-Mar 31, 2020",
datetime>"2020-03-31" & datetime< = "2020-06-30" ~ "Apr 1-Jun 30, 2020",
datetime>"2020-06-30" & datetime< = "2020-10-01" ~ "July 1-Sept 30, 2020"),
period=factor(period,levels = c("Oct 1-Dec 31, 2019","Jan 1-Mar 31, 2020","Apr 1-Jun 30, 2020","July 1-Sept 30, 2020")))
plots<- map(.x = unique(df$period), ~ df %>%
dplyr::filter(period == .x) %>%
ggplot()+
geom_point(aes(x=datetime,y=value),fill = "blue")+
scale_x_datetime(date_labels = "%b-%d-%Y",
date_breaks = "2 weeks",
expand = c(0,0)))
plots[[1]]
Я делаю несколько графиков и хочу обобщить сценарий, чтобы начинать и заканчивать метки оси x с первой и последней записями из каждой группы. Я хотел бы получать ярлыки каждые 2 недели, начиная с 1 октября 2019 года. Когда я использую, я использую date_breaks
, он сбрасывает первую и последнюю метки, а установка ограничений не работает. Я не хочу устанавливать метки вручную, так как каждый период будет иметь разные метки.
Когда я удаляю expand
и date_breaks
, что приводит к:
scale_x_datetime(date_labels = "%b-%d-%Y")
Это то, что я получаю, но это по месяцам, а не каждые 2 недели:
Интересно, но не совсем мне это нужно, чтобы сопоставить другие цифры и начать с водного года.
Тогда обходной путь, основанный на ответе здесь, будет заключаться в простом увеличении количества разрывов до желаемого значения:
library(tidyverse)
df<-tibble(datetime=seq(as.POSIXct("2019-10-01 12:00:00"),as.POSIXct("2020-10-01 12:00:00"), by = "15 min"),value=rnorm(35137,22,sd=1)) %>%
mutate(period=case_when(
datetime> = "2019-10-01" & datetime< = "2019-12-31" ~ "Oct 1-Dec 31, 2019",
datetime>"2019-12-31" & datetime< = "2020-03-31" ~ "Jan 1-Mar 31, 2020",
datetime>"2020-03-31" & datetime< = "2020-06-30" ~ "Apr 1-Jun 30, 2020",
datetime>"2020-06-30" & datetime< = "2020-10-01" ~ "July 1-Sept 30, 2020"),
period=factor(period,levels = c("Oct 1-Dec 31, 2019","Jan 1-Mar 31, 2020","Apr 1-Jun 30, 2020","July 1-Sept 30, 2020")))
plots<- map(.x = unique(df$period), ~ df %>%
dplyr::filter(period == .x) %>%
ggplot()+
geom_point(aes(x=datetime,y=value),fill = "blue")+
scale_x_datetime(date_labels = "%b-%d-%Y",
breaks = scales::pretty_breaks(n = 10),
expand = c(0.1,0)))
plots[[1]]
Настройка
expand = c(0.1,0)
работает достаточно хорошо для вас? В этом случае первая метка будет 30 сентября 2019 г., а не 01 октября 2019 г.