Изменить цвет фона между днем ​​​​и ночью в ggplot2 в R

Я строю графики в R на основе измерений артериального давления, хранящихся в приложении Apple Health, следуя фантастическому блогу Тараса Кадука .

Я изменил код для своих нужд, и теперь я хотел бы изменить цвета фона на графике в зависимости от значения времени. Я добавил столбец daynight с двумя значениями «ночь» и «день» («ночь» = с 18:00 до 06:00, «день» с 06:00 до 18:00). Есть ли способ использовать эти значения для переключения цвета фона на графике, чтобы все ночные периоды были затемнены? В качестве альтернативы я мог бы использовать непосредственно значение даты и времени (ось x), то есть значение POSIXct.

Я нашел только примеры, которые делают свое дело, но с одним (или несколькими) фиксированными значениями даты, такими как этот: Изменить цвет фона в ggplot2 - R на определенную дату по оси x .

Вот набор данных и код, который я использую до сих пор:

      Sample data (blood_pressure):
  value      type            datetime daynight         state
1    96 Diastolic 2022-01-10 07:52:48      day Hypertension 1
2   102 Diastolic 2022-01-10 07:09:58      day Hypertension 2
3   109 Diastolic 2022-01-09 19:58:56    night Hypertension 2
4   141  Systolic 2022-01-09 08:27:24      day Hypertension 1
5   146  Systolic 2022-01-10 19:09:19    night Hypertension 1


blood_pressure  %>% 
  ggplot(blood_pressure, aes(datetime, value)) + 
  geom_point()

Здесь Вы можете увидеть пример графика:

1 ответ

Вот пример с использованием данных @Henrik:

      d = data.frame(x = seq(from = Sys.time(), by = "1 hour", len = 50), y = 1)
d$hour = as.numeric(format(d$x, "%H"))
d$hour_shade =ifelse(d$hour >= 18 | d$hour <= 6, "gray60", "gray90")
ggplot(d, aes(x, y)) + 
  geom_rect(aes(xmin = x, xmax = lead(x), ymin = -Inf, ymax = Inf,
                fill = hour_shade)) +
  geom_point() +
  scale_fill_identity()

Другие вопросы по тегам