Используйте аннотацию («прямоугольник») для одного фасета в ggplot при построении временных рядов по оси X - PullRequest
1 голос
/ 18 апреля 2019

Я строю различные временные ряды в фасетах, и я хотел бы использовать annotate (), чтобы создать другой цвет фона только для одного из фасетов.Один аспект представляет последние 15 недель 2018 года (недели 38–52), а другой - первые 15 недель 2019 года (недели 1–15).Я хотел бы изменить цвет фона только на 5-8 недели в 2019 году. Однако, когда я пытаюсь это сделать, R меняет диапазон оси X 2018 с 38-52 недели на 1-52 недели.

Я пытался создать прямоугольник только для 5-8 недель на графике 2019 года следующим образом:

annotate("rect", xmin = 5, xmax = 8, min = 0, ymax = Inf, alpha = 0.3, fill="grey") +

Код, который я использую:

library(ggthemes)
week <- c(38:52, 1:15)
minutes <- sample(160, 30, replace=T)
year <- c(rep(2018, 15), rep(2019,15))
dat <- data.frame(year, week, minutes)

ggplot(dat, aes(week, minutes, group=year)) +
  annotate("rect", xmin = 5, xmax = 8, min = 0, ymax = Inf, alpha = 0.3, fill="grey") +
  geom_line(size=1, color="black") +
  geom_point(size=2, color="black") +
  theme_fivethirtyeight() +
  facet_wrap(~ year, scales = "free") +
  scale_y_continuous(limits=c(0,200))

Я ожидаю иметь два аспекта: один с результатами 2018 года с диапазоном оси X между 38-52, и один с результатами 2019 года с диапазоном оси X между 1-15.Фактический результат - один с результатами 2018 года с диапазоном оси X между 1-52 и один с результатами 2019 года с диапазоном оси X между 1-15.

1 Ответ

2 голосов
/ 18 апреля 2019

Annotate не может сделать это, так как вы не можете снабдить его переменной фасетирования (year), однако вы можете сделать это, используя geom_rect. Для этого необходимо передать информационный кадр, содержащий переменную фацетирования (year):

Спасибо @ aosmith , теперь geom_rect рисуется только один раз:

  ggplot(dat, aes(week, minutes, group=year)) +
  geom_line(size=1, color="black") +
  geom_point(size=2, color="black") +
  facet_wrap(~ year, scales = "free") +
  theme_fivethirtyeight() +
  scale_y_continuous(limits=c(0,200)) +
  geom_rect(data = data.frame(year = 2019), aes(xmin = 5, xmax = 8, ymin = 0, ymax = Inf), alpha = 0.3, fill="grey", inherit.aes = FALSE)

Это дает желаемый участок:

enter image description here

...