pays <- "FRA"
pays2 <- "EUZ"
# on définit les données, le pays en évidence, `pays2` moins mis en évidence et `autres` pas mis en évidence du tout
autres <- data |> distinct(pays) |> pull() |> setdiff(c(pays, pays2))
gg <- ggplot(data) +
# l'`aes` commun à plusieurs geom, une bonne pratique qui rend le code plus simple
aes(x=date, y=value, group = pays, color = variable, fill = variable) +
# la bande grise qui indique les prévisions (spécifique à chque exercice de prévision)
annotate_prevision(size=0) +
# le `facet`, avec une échelle libre sur les y -- jamais de spaghettis
facet_wrap(vars(variable), scales = "free_y") +
# dans ce geom_line on filtre les pays en fond de graphique, qui sont en gris clair et en trait fin ce qui peut se faire aussi avec le pkg `{highlitght}`
geom_line(
data = ~.x |> filter(pays %in% autres),
size = 2, color = "gray85", linewidth = 0.25) +
geom_line(data = ~.x |> filter(pays==pays2),
size = 2, color = "gray35", linewidth = 0.25) +
# le premier geom_point_interactive, pour les pays du fond, en gris clair
geom_point_interactive(
data = ~.x |> filter(pays %in% autres),
aes(tooltip = tooltip, data_id = date),
size = 0.75, stroke = 0.25, shape = 21,
col = "white", fill = "gray85",
hover_nearest = TRUE) +
# le second geom_point_interactive() pour le pays moins en évidence en gris foncé
geom_point_interactive(
data = ~.x |> filter(pays==pays2),
aes(tooltip = tooltip, data_id = date),
size = 0.75, stroke = 0.25, shape = 21,
col = "white", fill = "gray35",
hover_nearest = TRUE) +
# les lignes colorées (en fonction des variables, voir l'`aes`) pour le pays principal (notez `!!pays` qui signifie utiliser la variable globale, pas celle du data.frame)
geom_line(
data = ~ .x |> filter(pays==!!pays)) +
# les points pour le pays principal, de `shape 21` et colorés par `fill` avec un cercle blanc
geom_point_interactive(
data = ~ .x |> filter(pays==!!pays),
aes(tooltip = tooltip, data_id = date),
stroke = 0.5, shape = 21, col = "white", hover_nearest = TRUE) +
# l'échelle des dates qui utilise la fonction du package `{ofce}`, avec des ticks mineurs pour les trimestres
scale_ofce_date(
date_breaks = "1 year",
date_minor_breaks = "3 months",
expand = expansion(mult=c(0.05, 0.0))) +
# les labels des axes, on garde ça simple et on indique principalement l'unité
labs(y="En %", x=NULL) +
# le theme ofce (l'ordre des éléments n'est pas critique) !!!
theme_ofce() +
# les couleurs : procéder ainsi permet la normalisation des couleurs a posteriori
PrettyCols::scale_color_pretty_d("Summer") +
PrettyCols::scale_fill_pretty_d("Summer") +
# l'aspect des labels, avec le bon nombre de chiffres après la virgule et l'utilisation de `scales::pretty_breaks()` pour des labels choisis astucieusement
scale_y_continuous(labels = label_number(decimal.mark = ",", accuracy = 1, suffix = "%"),
breaks = scales::breaks_pretty()) +
# on ne met pas les légendes de couleur ou de remplissage, ce n'est pas utile dans ce graphique, on essaye de ne pas les mettre en dessous de façon générale si elles sont nécessaire
guides(color = "none", fill = "none") +
# les notes et sources, standardisées, avec en particulier les derniers points connus.
ofce_caption(
source = "INSEE, Eurostat, instituts nationaux",
note = "La zone euro est en gris foncé",
dpt = "2024-04-01", dptf = "quarter")