Изменить цвет фона между днем и ночью в 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()