J'essaie d'ajouter un arrière-plan à un tracé pour montrer les conditions de luminosité sur une période de 24 heures (par exemple, la nuit, le lever du soleil, le jour, le coucher du soleil). Je voudrais utiliser un dégradé pour indiquer les périodes de transition de la lumière (8 AM-9AM pour sunrise et 20 PM-9PM pour le coucher du soleil) et les couleurs unies pour le jour et la nuit.Dégradé horizontal avec rasterGrob R pour ggplot2 background
Je suis très proche, cependant les gradients sont dans une orientation verticale et j'en ai besoin horizontalement.
Toute aide serait grandement appréciée!
Code de travail actuel
library(ggplot2)
library(scales)
## date, start and stop time
datestart <- as.POSIXct(strptime('2017-06-20 00:00:00', format = "%Y-%m-%d %H:%M:%S"))
datestop <- as.POSIXct(strptime('2017-06-20 23:59:59', format = "%Y-%m-%d %H:%M:%S"))
## sunrise
risestart <- as.POSIXct(strptime('2017-06-20 08:00:00', format = "%Y-%m-%d %H:%M:%S"))
risestop <- as.POSIXct(strptime('2017-06-20 09:00:00', format = "%Y-%m-%d %H:%M:%S"))
## sunset
setstart <- as.POSIXct(strptime('2017-06-20 20:00:00', format = "%Y-%m-%d %H:%M:%S"))
setstop <- as.POSIXct(strptime('2017-06-20 21:00:00', format = "%Y-%m-%d %H:%M:%S"))
## data limits
lims <- c(datestart, datestop)
## generate some random data
timelist <- seq(datestart, datestop, by = '15 mins')
act <- runif(length(timelist), min = 0, max = 50)
data <- data.frame(timelist, act)
## colours
nightColour <- c("#9ea5ff")
sunriseColour <- c("#9ea5ff", "#fcffbd")
testColour <- c(c("#9ea5ff"), c("#fcffbd"))
dayColour <- c("#fcffbd")
sunsetColour <- c("#fcffbd","#9ea5ff")
## add background
nightGrob <- rasterGrob(nightColour, width = unit(1,"npc"), height = unit(1,"npc"),
interpolate = TRUE)
sunriseGrob <- rasterGrob(sunriseColour, width = unit(1,"npc"), height = unit(1,"npc"),
interpolate = TRUE)
dayGrob <- rasterGrob(dayColour, width = unit(1,"npc"), height = unit(1,"npc"),
interpolate = TRUE)
sunsetGrob <- rasterGrob(sunsetColour, width = unit(1,"npc"), height = unit(1,"npc"),
interpolate = TRUE)
## plot
ggplot(data = data, aes(x = timelist, y = act)) +
annotation_custom(nightGrob, xmin = as.numeric(datestart), xmax = as.numeric(risestart) + 100, ymin = -Inf, ymax = Inf) +
annotation_custom(sunriseGrob, xmin = as.numeric(risestart), xmax = as.numeric(risestop), ymin = -Inf, ymax = Inf) +
annotation_custom(dayGrob, xmin = as.numeric(risestop), xmax = as.numeric(setstart), ymin = -Inf, ymax = Inf) +
annotation_custom(sunsetGrob, xmin = as.numeric(setstart), xmax = as.numeric(setstop), ymin = -Inf, ymax = Inf) +
annotation_custom(nightGrob, xmin = as.numeric(setstop), xmax = as.numeric(datestop), ymin = -Inf, ymax = Inf) +
geom_bar(stat = "identity", colour = "black", fill = "white") +
scale_x_datetime(limits = lims, expand = c(0,0), breaks = date_breaks('1 hour'), labels = date_format(format = "%H", tz = "Europe/London")) +
scale_y_continuous(expand = c(0,0))
transposer les couleurs ('t()') – baptiste
Merci! Cela a fait l'affaire. – user3458130