Bien plus qu’un beau graphique

Créativité et Accessibilité avec ggplot2

Cara R Thompson, PhD
RencontresR 2026, Nantes

Bonjour ! 👋

  • 👩🏻 Cara Thompson
  • 👩🏻‍💻 Consultante en DataViz
  • 🗺️ Édimbourg, Ecosse
  • 👧🎂 + 👧🚀

Bonjour ! 👋

  • 👩🏻 Cara Thompson
  • 👩🏻‍💻 Consultante en DataViz
  • 🗺️ Édimbourg, Ecosse
  • 👧🎂 + 👧🚀

Bonjour ! 👋

  • 👩🏻 Cara Thompson
  • 👩🏻‍💻 Consultante en DataViz
  • 🗺️ Édimbourg, Ecosse
  • 👧🎂 + 👧🚀

Bonjour ! 👋

  • 👩🏻 Cara Thompson
  • 👩🏻‍💻 Consultante en DataViz
  • 🗺️ Édimbourg, Ecosse
  • 👧🎂 + 👧🚀

Bonjour ! 👋

  • 👩🏻 Cara Thompson
  • 👩🏻‍💻 Consultante en DataViz
  • 🗺️ Édimbourg, Ecosse
  • 👧🎂 + 👧🚀
  • 💙

Au menu

  • Un défi
  • Une intrigue
  • 15 astuces pour optimiser l’accessibilité de nos graphiques

Un défi

L’année prochaine, aux RencontresR, on organisera aussi la prochaine saison du Meilleur Pâtissier.

Mary Berry, notre Mercotte nationale, se joindra à nous comme membre du jury.

  • Combien de chocolat va-t-il falloir acheter?



Un défi

Votre graphique unique devra

  • avoir “un look RencontresR”
  • être facile a comprendre
  • répondre à la question!
  • être accessible

Un défi

Votre graphique unique devra

  • avoir “un look RencontresR”
  • être facile a comprendre
  • répondre à la question!
  • être accessible

“Accessible”?

À vos rouleaux, prêts, pâtissez !

  • 📦 {bakeoff}
  • Chocolat, Framboises et Oranges
  • Combien dans chaque saison ?
  • Un effet Mary Berry ?
  • head(creations) 👉
# A tibble: 6 × 5
# Groups:   series [2]
  series ingredient value  rank mary_berry
   <int> <chr>      <int> <int> <chr>     
1      1 chocolat      20     1 oui       
2      1 framboise      6     3 oui       
3      1 orange         8     2 oui       
4      2 chocolat      30     1 oui       
5      2 framboise     12     2 oui       
6      2 orange         6     3 oui       

À vos rouleaux, prêts, pâtissez !


creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient
  )) +
  geom_point(aes(shape = mary_berry), size = 8) +
  theme_minimal(base_size = 14)

À vos rouleaux, prêts, pâtissez !

Euh…

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient
  )) +
  geom_point(aes(shape = mary_berry), size = 8) +
  theme_minimal(base_size = 14)

À vos rouleaux, prêts, pâtissez !

La continuité nous aide beaucoup

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  geom_line(show.legend = FALSE) +
  geom_point(aes(shape = mary_berry), size = 8) +
  theme_minimal(base_size = 14)

À vos rouleaux, prêts, pâtissez !

Petit changement, gros effet

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  geom_line(show.legend = FALSE) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = "grey20",
    alpha = 0.1
  ) +
  geom_vline(xintercept = 7.5, linetype = 3) +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25)
  ) +
  theme_minimal(base_size = 14)

À vos rouleaux, prêts, pâtissez !

Rajoutons un peu de texte…

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  geom_line(show.legend = FALSE) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = "grey20",
    alpha = 0.1
  ) +
  geom_vline(xintercept = 7.5, linetype = 3) +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8) +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25)
  ) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    plot.title = marquee::element_marquee(width = 1),
    plot.subtitle = marquee::element_marquee(width = 1)
  )

#1 - Des couleurs qui parlent

imagecolorpicker.com

#1 - Des couleurs qui parlent

couleurs_originales <- c(
  "chocolat" = "#661425",
  "orange" = "#f1a700",
  "framboise" = "#b9001b",
  "mary" = "#fdd0e6"
)

monochromeR::view_palette(couleurs_originales)

#2 - Des couleurs facilement différenciables

Par tous - viz4.net/palettes

#661425, #f1a700, #b9001b, #fdd0e6

#2 - Des couleurs facilement différenciables

Avant

couleurs_originales <- c(
  "chocolat" = "#661425",
  "orange" = "#f1a700",
  "framboise" = "#b9001b",
  "mary" = "#fdd0e6"
)

monochromeR::view_palette(couleurs_originales)

Après

couleurs_differenciables <- c(
  "chocolat" = "#661425",
  "orange" = "#f1a700",
  "framboise" = "#df3b66",
  "mary" = "#fdd0e6"
)

monochromeR::view_palette(couleurs_differenciables)

#3 - Des couleurs atténuées

Et si mes couleurs ne vont pas du tout ensemble?

#3 - Des couleurs atténuées

Notre “look RencontresR” à la rescousse !


couleurs_differenciables <- c(
  "chocolat" = "#661425",
  "orange" = "#f1a700",
  "framboise" = "#D53D6A",
  "mary" = "#fdd0e6"
)

bleu_rr <- "#256bbf"

Un Orange plus “RencontresR”? #f1a700 + #256bbf

👉 monochromeR

#3 - Des couleurs atténuées

Notre “look RencontresR” à la rescousse !

Avant

couleurs_differenciables <- c(
  "chocolat" = "#661425",
  "orange" = "#f1a700",
  "framboise" = "#D53D6A",
  "mary" = "#fdd0e6"
)

monochromeR::view_palette(couleurs_differenciables) +
  theme(plot.background = element_rect("#256bbf"))

Après

couleurs_accessibles <- c(
  "chocolat" = "#5F1C34",
  "orange" = "#DCA113",
  "framboise" = "#d33b66",
  "mary" = "#F2CAE4"
)

monochromeR::view_palette(couleurs_accessibles) +
  theme(plot.background = element_rect("#256bbf"))

#3 - Des couleurs atténuées

“Pour de nombreux publics neuroatypiques, il existe une préférence pour les teintes atténuées et pastel, ainsi que les tons neutres.”

  • Designing for neurodivergent audiences, Nightingale Issue 03

Avant (différenciables)

#3 - Des couleurs atténuées

“Pour de nombreux publics neuroatypiques, il existe une préférence pour les teintes atténuées et pastel, ainsi que les tons neutres.”

  • Designing for neurodivergent audiences, Nightingale Issue 03

Après (différenciables et atténuées)

#3 - Des couleurs atténuées



Après (différenciables et atténuées)

Voyons voir…

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = "grey20",
    alpha = 0.1
  ) +
  geom_vline(xintercept = 7.5, linetype = 3) +
  geom_line(show.legend = FALSE) +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8) +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25)
  ) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    plot.title = marquee::element_marquee(
      width = 1
    ),
    plot.subtitle = marquee::element_marquee(width = 1),
    legend.title = element_blank(),
    panel.grid.minor.x = element_blank()
  )

Voyons voir…

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_vline(
    xintercept = 7.5,
    linetype = 3,
    colour = couleurs_accessibles["mary"]
  ) +
  geom_line(show.legend = FALSE, alpha = 0.8) +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8) +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    plot.title = marquee::element_marquee(
      width = 1
    ),
    plot.subtitle = marquee::element_marquee(width = 1, vjust = 0),
    legend.title = element_blank(),
    panel.grid.minor.x = element_blank()
  )

#4 - Un contraste suffisant

Les Web Content Accessibility Guidelines 2.1 exigent un taux de contraste d’au moins 3:1 pour les « éléments graphiques significatifs ».

Atteindre ce seuil est une impossibilité mathématique pour toute palette contenant plus qu’une poignée de couleurs.


Power of Colour, Nightingale Issue 03

#4 - Un contraste suffisant

#4 - Un contraste suffisant

#4 - Un contraste suffisant

#4 - Un contraste suffisant

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(
    xintercept = 7.5,
    linetype = 3,
    colour = couleurs_accessibles["mary"]
  ) +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8) +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    plot.title = marquee::element_marquee(
      width = 1
    ),
    plot.subtitle = marquee::element_marquee(width = 1, vjust = 0),
    legend.title = element_blank(),
    panel.grid.minor.x = element_blank()
  )

#4 - Un contraste suffisant

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(
    aes(shape = ingredient),
    size = 8,
    colour = "#3f4a57",
    stroke = 0.75
  ) +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    plot.title = marquee::element_marquee(
      width = 1
    ),
    plot.subtitle = marquee::element_marquee(width = 1, vjust = 0),
    legend.title = element_blank(),
    panel.grid.minor.x = element_blank()
  )

#5 - Une typographie qui guide le regard

#5 - Une typographie qui guide le regard

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(
    aes(shape = ingredient),
    size = 8,
    colour = "#3f4a57",
    stroke = 0.75
  ) +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25)
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    plot.title = marquee::element_marquee(
      width = 1
    ),
    plot.subtitle = marquee::element_marquee(width = 1, vjust = 0),
    legend.title = element_blank(),
    panel.grid.minor.x = element_blank()
  )

#5 - Une typographie qui guide le regard

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    plot.title = marquee::element_marquee(
      width = 1,
      size = 22
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = 17
    ),
    legend.title = element_blank(),
    panel.grid.minor.x = element_blank()
  )

#5 - Une typographie qui guide le regard

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = 22
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = 17
    ),
    legend.title = element_blank(),
    panel.grid.minor.x = element_blank()
  )

#5 - Une typographie qui guide le regard

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6)
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2)
    ),
    legend.title = element_blank(),
    panel.grid.minor.x = element_blank()
  )

#5 - Une typographie qui guide le regard

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 20) +
  theme(
    plot.title.position = "plot",
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6)
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2)
    ),
    legend.title = element_blank(),
    panel.grid.minor.x = element_blank()
  )

#5 - Une typographie qui guide le regard

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6)
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2)
    ),
    legend.title = element_blank(),
    panel.grid.minor.x = element_blank()
  )

#6 - Une police lisible, qui a du caractère

À éviter

  • Trop large
  • Trop étroit
  • Trop distrayant
  • Trop ennuyeux

À rechercher

  • ceo
  • I1l
  • qp db
  • 0123456789

#6 - Une police lisible, qui a du caractère

  • Atkinson Hyperlegible
  • Inclusive Sans
  • Lexend
  • Noto Serif
  • ceo I1l qp db 1234567890
  • ceo I1l qp db 1234567890
  • ceo I1l qp db 1234567890
  • ceo I1l qp db 1234567890

#6 - Une police lisible, qui a du caractère

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6)
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2)
    ),
    legend.title = element_blank(),
    panel.grid.minor.x = element_blank()
  )

#6 - Une police lisible, qui a du caractère

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "Les années Mary Berry"),
    hjust = 1,
    halign = 1,
    colour = "black",
    box.colour = NA,
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6),
      family = "Inclusive Sans"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans"
    ),
    legend.title = element_blank(),
    panel.grid.minor.x = element_blank()
  )

#7 - Des annotations bien situées

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "**Les années Mary Berry**"),
    hjust = 1,
    halign = 1,
    box.colour = NA,
    colour = "#3f4a57",
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6),
      family = "Inclusive Sans"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans"
    ),
    legend.title = element_blank(),
    legend.position = "top",
    legend.justification = 0,
    panel.grid.minor.x = element_blank()
  )

#7 - Des annotations bien situées

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "**Les années Mary Berry**"),
    hjust = 1,
    halign = 1,
    box.colour = NA,
    colour = "#3f4a57",
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6),
      family = "Inclusive Sans"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans"
    ),
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.justification = 0.5,
    panel.grid.minor.x = element_blank()
  )

#7 - Des annotations bien situées

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = 31, label = "**Les années Mary Berry**"),
    hjust = 1,
    halign = 1,
    box.colour = NA,
    colour = "#3f4a57",
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6),
      family = "Inclusive Sans"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans"
    ),
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.justification = 0.5,
    panel.grid.minor.x = element_blank()
  )

#7 - Des annotations bien situées

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = I(1), label = "**Les années Mary Berry**"),
    hjust = 1,
    halign = 1,
    box.colour = NA,
    colour = "#3f4a57",
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6),
      family = "Inclusive Sans"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans"
    ),
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.justification = 0.5,
    panel.grid.minor.x = element_blank()
  )

#7 - Des annotations bien situées

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = I(1), label = "**Les années Mary Berry**"),
    vjust = 1.5,
    hjust = 1,
    halign = 1,
    box.colour = NA,
    colour = "#3f4a57",
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  scale_y_continuous(expand = expansion(mult = c(0.02, 0.5))) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6),
      family = "Inclusive Sans"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans"
    ),
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.justification = 0.5,
    panel.grid.minor.x = element_blank()
  )

#7 - Des annotations bien situées

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = I(1), label = "**Les années Mary Berry**"),
    vjust = 1.5,
    hjust = 1,
    halign = 1,
    box.colour = NA,
    colour = "#3f4a57",
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  scale_y_continuous(expand = expansion(mult = c(0.02, 0.1))) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6),
      family = "Inclusive Sans"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans"
    ),
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.justification = 0.5,
    panel.grid.minor.x = element_blank()
  )

#7 - Des annotations bien situées

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = I(1), label = "**Les années Mary Berry**"),
    vjust = 1.5,
    hjust = 1,
    halign = 1,
    box.colour = NA,
    colour = "#3f4a57",
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  scale_y_continuous(expand = expansion(mult = c(0.02, 0.1))) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6),
      family = "Inclusive Sans"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans"
    ),
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.justification = 0.5,
    panel.grid.minor.x = element_blank()
  )

#8 - Des couleurs pour optimiser la lecture

Pourquoi "#3f4a57"?

monochromeR::generate_palette(
  bleu_rr,
  "go_darker",
  n_colours = 3,
  view_palette = TRUE
)

[1] "#256BBF" "#164072" "#071526"
monochromeR::generate_palette(
  "#071526",
  "go_lighter",
  n_colours = 8,
  view_palette = TRUE
)

[1] "#071526" "#232F3E" "#3F4A57" "#5C6570" "#787F89" "#949AA2" "#B1B5BA"
[8] "#CDD0D3"

#8 - Des couleurs pour optimiser la lecture

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = I(1), label = "**Les années Mary Berry**"),
    vjust = 1.5,
    hjust = 1,
    halign = 1,
    box.colour = NA,
    colour = "#3f4a57",
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  scale_y_continuous(expand = expansion(mult = c(0.02, 0.1))) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans"),
    axis.text = element_text(family = "Inclusive Sans"),
    axis.title = element_text(family = "Inclusive Sans"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6),
      family = "Inclusive Sans"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans"
    ),
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.justification = 0.5,
    panel.grid.minor.x = element_blank()
  )

#8 - Des couleurs pour optimiser la lecture

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = I(1), label = "**Les années Mary Berry**"),
    vjust = 1.5,
    hjust = 1,
    halign = 1,
    box.colour = NA,
    colour = "#3f4a57",
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  scale_y_continuous(expand = expansion(mult = c(0.02, 0.1))) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
    axis.text = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
    axis.title = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      size = rel(1.6),
      family = "Inclusive Sans",
      colour = "#071526"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans",
      colour = "#3f4a57"
    ),
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.justification = 0.5,
    panel.grid.minor.x = element_blank()
  )

#9 - De la place pour respirer

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = I(1), label = "**Les années Mary Berry**"),
    vjust = 1.5,
    hjust = 1,
    halign = 1,
    box.colour = NA,
    colour = "#3f4a57",
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_x_continuous(breaks = c(1:10)) +
  scale_y_continuous(expand = expansion(mult = c(0.02, 0.1))) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
    axis.text = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
    axis.title = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      margin = margin(14, 0, 14, 0),
      size = rel(1.6),
      lineheight = 1.15,
      family = "Inclusive Sans",
      colour = "#071526"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans",
      colour = "#3f4a57",
      lineheight = 1.2,
      margin = margin(7, 0, 21, 0)
    ),
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.justification = 0.5,
    panel.grid.minor.x = element_blank(),
    plot.margin = margin_auto(14 * 1.5)
  )



#10 - Un fond pour tout rassembler

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = I(1), label = "**Les années Mary Berry**"),
    vjust = 1.5,
    hjust = 1,
    halign = 1,
    box.colour = NA,
    colour = "#3f4a57",
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_y_continuous(limits = c(0, 31), expand = expansion(add = c(0, 2))) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
    axis.text = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
    axis.title = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      margin = margin(14, 0, 14, 0),
      size = rel(1.6),
      lineheight = 1.15,
      family = "Inclusive Sans",
      colour = "#071526"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans",
      colour = "#3f4a57",
      lineheight = 1.2,
      margin = margin(7, 0, 21, 0)
    ),
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.justification = 0.5,
    panel.grid.minor.x = element_blank(),
    plot.margin = margin_auto(14 * 1.5)
  )

#10 - Un fond pour tout rassembler

creations |>
  ggplot(aes(
    x = series,
    y = value,
    colour = ingredient,
    fill = ingredient
  )) +
  annotate(
    geom = "rect",
    xmin = -Inf,
    xmax = 7.5,
    ymin = -Inf,
    ymax = Inf,
    fill = couleurs_accessibles["mary"],
    alpha = 0.3
  ) +
  geom_line(show.legend = FALSE) +
  geom_vline(xintercept = 7.5, linewidth = 0.2, colour = "#ca3e8c") +
  ggtext::geom_textbox(
    data = data.frame(),
    aes(x = 7.5, y = I(1), label = "**Les années Mary Berry**"),
    vjust = 1.5,
    hjust = 1,
    halign = 1,
    box.colour = NA,
    colour = "#3f4a57",
    family = "Inclusive Sans",
    fill = NA
  ) +
  geom_point(aes(shape = ingredient), size = 8, colour = "#3f4a57") +
  labs(
    title = "Le chocolat demeure l'ingrédient le plus utilisé, même s'il s'est fait brièvement doubler par les oranges en Saison 8",
    subtitle = "Le nombre de créations incluant du chocolat était bien plus élevé pendant que Mary Berry était dans le jury. On anticipe d'avoir besoin de deux fois plus de chocolat la saison prochaine si elle revient.",
    x = "Saison",
    y = "Nombre de créations"
  ) +
  scale_shape_manual(
    values = c("chocolat" = 22, "orange" = 21, "framboise" = 25),
  ) +
  scale_fill_manual(values = couleurs_accessibles) +
  scale_colour_manual(values = couleurs_accessibles) +
  scale_y_continuous(limits = c(0, 31), expand = expansion(add = c(0, 2))) +
  scale_x_continuous(breaks = c(1:10)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title.position = "plot",
    text = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
    axis.text = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
    axis.title = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
    plot.title = marquee::element_marquee(
      width = 1,
      style = marquee::classic_style(weight = "bold"),
      margin = margin(14, 0, 14, 0),
      size = rel(1.6),
      lineheight = 1.15,
      family = "Inclusive Sans",
      colour = "#071526"
    ),
    plot.subtitle = marquee::element_marquee(
      width = 1,
      vjust = 0,
      size = rel(1.2),
      family = "Inclusive Sans",
      colour = "#3f4a57",
      lineheight = 1.2,
      margin = margin(7, 0, 21, 0)
    ),
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.justification = 0.5,
    panel.grid.minor.x = element_blank(),
    plot.margin = margin_auto(14 * 1.5),
    plot.background = element_rect(fill = "#f8f8f8", colour = "#f8f8f8")
  )

Bien plus qu’un beau graphique

Et l’intrigue alors?

L’intrigue

L’intrigue

L’intrigue

L’intrigue

Des données

🚨 Claude + spéculation ➡️ Ne basez pas votre stratégie dessus!

temperatures <- read.csv(here::here("data/gbbo_with_weather.csv")) |>
  dplyr::filter(year > 2011)

head(temperatures)
  series year episode filming_saturday filming_sunday week_of_year
1      3 2012       1       2012-04-14     2012-04-15           15
2      3 2012       2       2012-04-21     2012-04-22           16
3      3 2012       3       2012-04-28     2012-04-29           17
4      3 2012       4       2012-05-05     2012-05-06           18
5      3 2012       5       2012-05-12     2012-05-13           19
6      3 2012       6       2012-05-19     2012-05-20           20
        location network air_start_date air_end_date avg_temp_c max_temp_c
1 Harptree Court BBC Two     2012-08-14   2012-10-16        5.4        9.1
2 Harptree Court BBC Two     2012-08-14   2012-10-16        6.3       10.3
3 Harptree Court BBC Two     2012-08-14   2012-10-16        7.0        9.6
4 Harptree Court BBC Two     2012-08-14   2012-10-16        6.3        9.8
5 Harptree Court BBC Two     2012-08-14   2012-10-16        8.1       12.6
6 Harptree Court BBC Two     2012-08-14   2012-10-16       10.8       14.1
  min_temp_c total_rainfall_mm
1        1.7               1.1
2        2.3               3.5
3        4.3              25.7
4        2.8               0.7
5        3.6               0.0
6        7.5               0.4

Des données

🚨 Claude + spéculation ➡️ Ne basez pas votre stratégie dessus!

temperatures |>
  ggplot(aes(x = week_of_year, y = max_temp_c)) +
  geom_rect(aes(
    xmin = week_of_year - 0.5,
    xmax = week_of_year + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line() +
  facet_grid(year ~ .)

Les données

🚨 Claude + spéculation ➡️ Ne basez pas votre stratégie dessus!

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line() +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  facet_grid(year ~ .)

Notre theme_rencontresR() !

theme_rencontresR <- function(base_text_size = 14) {
  theme_minimal(base_size = base_text_size) +
    theme(
      text = element_text(family = "Inclusive Sans", colour = "#3f4a57"),
      plot.title.position = "plot",
      plot.title = marquee::element_marquee(
        width = 1,
        margin = margin(base_text_size, 0, base_text_size, 0),
        size = rel(1.6),
        lineheight = 1.15,
        style = marquee::classic_style(weight = "bold"),
        family = "Inclusive Sans",
        colour = "#071526"
      ),
      plot.subtitle = marquee::element_marquee(
        width = 1,
        vjust = 0,
        size = rel(1.2),
        family = "Inclusive Sans",
        colour = "#3f4a57",
        lineheight = 1.2,
        margin = margin(base_text_size / 2, 0, base_text_size * 2, 0)
      ),
      legend.title = element_blank(),
      panel.grid = element_line(colour = "white"),
      panel.grid.minor.x = element_blank(),
      plot.margin = margin_auto(base_text_size * 2),
      plot.background = element_rect(fill = "#f8f8f8", colour = "#f8f8f8")
    )
}

Notre theme_rencontresR()!

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line() +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  facet_grid(year ~ .)

Notre theme_rencontresR()!

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line() +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  facet_grid(year ~ .) +
  theme_rencontresR()

#11 - Une intensité dans le bon sens

temperatures |>
  ggplot(aes(x = week_of_year, y = max_temp_c)) +
  geom_rect(aes(
    xmin = week_of_year - 0.5,
    xmax = week_of_year + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line() +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_fill_gradient(low = "white", high = "red") +
  facet_grid(year ~ .) +
  theme_rencontresR()

#11 - Une intensité dans le bon sens

temperatures |>
  ggplot(aes(x = week_of_year, y = max_temp_c)) +
  geom_rect(aes(
    xmin = week_of_year - 0.5,
    xmax = week_of_year + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line() +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_fill_gradient(low = "white", high = "#DC7683") +
  facet_grid(year ~ .) +
  theme_rencontresR()

#11 - Une intensité dans le bon sens

temperatures |>
  ggplot(aes(x = week_of_year, y = total_rainfall_mm)) +
  geom_rect(aes(
    xmin = week_of_year - 0.5,
    xmax = week_of_year + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = total_rainfall_mm
  )) +
  geom_line() +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_fill_gradient(low = "white", high = "#256bbf") +
  facet_grid(year ~ .) +
  theme_rencontresR()

#12 - Des petits rappels visuels

chocolate_keywords <- c(
  "chocolate",
  "torte",
  "fondant",
  "mousse",
  "truffle",
  "bombe"
)

ice_cream_keywords <- c(
  "ice cream",
  "ice-cream",
  "gelato",
  "sorbet",
  "parfait",
  "baked alaska"
)

meringue_souffle_words <- c(
  "pavlova",
  "meringue",
  "souffl"
)


technicals <- read.csv(here::here("data/gbbo_technicals.csv")) |>
  # dplyr::rowwise() |>
  mutate(
    # First, clean problematic Unicode characters
    technical_raw = stringr::str_replace_all(
      technical_raw,
      "[\u0080-\uFFFF]",
      ""
    ),
    # Now do the replacements with stringr instead of gsub
    technical_bake = stringr::str_replace(technical_raw, "^.*:", ""),
    technical_bake = stringr::str_replace(technical_bake, "^.*[-–]", ""),
    technical_bake = stringr::str_replace(
      technical_bake, #
      "feuille",
      "Mille-feuille"
    ),
    technical_bake = stringr::str_squish(technical_bake)
  ) |>
  select(-technical_raw) |>
  mutate(series = factor(series), episode = factor(episode))

# Create a flag for chocolate and ice cream bakes
episode_analysis <- bakeoff::episodes_raw |>
  left_join(technicals) |>
  mutate(
    has_chocolate = grepl(
      paste(chocolate_keywords, collapse = "|"),
      signature,
      ignore.case = TRUE
    ) +
      grepl(
        paste(chocolate_keywords, collapse = "|"),
        showstopper,
        ignore.case = TRUE
      ) +
      grepl(
        paste(chocolate_keywords, collapse = "|"),
        technical_bake,
        ignore.case = TRUE
      ),
    has_puff = grepl(
      paste(meringue_souffle_words, collapse = "|"),
      signature,
      ignore.case = TRUE
    ) +
      grepl(
        paste(meringue_souffle_words, collapse = "|"),
        showstopper,
        ignore.case = TRUE
      ) +
      grepl(
        paste(meringue_souffle_words, collapse = "|"),
        technical_bake,
        ignore.case = TRUE
      ),
    has_ice_cream = grepl(
      paste(ice_cream_keywords, collapse = "|"),
      signature,
      ignore.case = TRUE
    ) +
      grepl(
        paste(ice_cream_keywords, collapse = "|"),
        showstopper,
        ignore.case = TRUE
      ) +
      grepl(
        paste(ice_cream_keywords, collapse = "|"),
        technical_bake,
        ignore.case = TRUE
      )
  ) |>
  group_by(series, episode) |>
  summarise(
    total_bakes = n() * 3, # Make this * 3 when add technicals
    chocolate_count = sum(has_chocolate),
    ice_cream_count = sum(has_ice_cream),
    puff_count = sum(has_puff),
    chocolate_pct = round(100 * chocolate_count / total_bakes, 1),
    ice_cream_pct = round(100 * ice_cream_count / total_bakes, 1),
    puff_pct = round(100 * puff_count / total_bakes, 1),
    .groups = "drop"
  ) |>
  filter_out(series %in% c("1", "2"))

head(episode_analysis)

#12 - Des petits rappels visuels

# A tibble: 6 × 9
  series episode total_bakes chocolate_count ice_cream_count puff_count
  <fct>  <fct>         <dbl>           <int>           <int>      <int>
1 3      1                36               4               0          0
2 3      2                33               3               0          0
3 3      3                30               1               0          0
4 3      4                27              12               0          7
5 3      5                24               2               0          0
6 3      6                21               4               0          0
# ℹ 3 more variables: chocolate_pct <dbl>, ice_cream_pct <dbl>, puff_pct <dbl>

#12 - Des petits rappels visuels

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = chocolate_pct, x = as.numeric(episode)),
    colour = couleurs_accessibles["chocolat"]
  ) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = ice_cream_pct, x = as.numeric(episode)),
    colour = bleu_rr
  ) +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_fill_gradient(low = "white", high = "#DC7683") +
  facet_grid(year ~ .) +
  theme_rencontresR()

#12 - Des petits rappels visuels

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = chocolate_pct, x = as.numeric(episode)),
    colour = couleurs_accessibles["chocolat"]
  ) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = ice_cream_pct, x = as.numeric(episode)),
    colour = bleu_rr
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = chocolate_pct,
      x = as.numeric(episode),
      label = "🍫",
      size = chocolate_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = ice_cream_pct,
      x = as.numeric(episode),
      label = "🍦",
      size = ice_cream_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_fill_gradient(low = "white", high = "#DC7683") +
  facet_grid(year ~ .) +
  theme_rencontresR()

#12 - Des petits rappels visuels

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = chocolate_pct, x = as.numeric(episode)),
    colour = couleurs_accessibles["chocolat"]
  ) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = ice_cream_pct, x = as.numeric(episode)),
    colour = bleu_rr
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = chocolate_pct,
      x = as.numeric(episode),
      label = "🍫",
      size = chocolate_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = ice_cream_pct,
      x = as.numeric(episode),
      label = "🍦",
      size = ice_cream_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_fill_gradient(low = "white", high = "#DC7683") +
  scale_size(range = c(3, 10)) +
  facet_grid(year ~ .) +
  theme_rencontresR()

#12 - Des petits rappels visuels

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = chocolate_pct, x = as.numeric(episode)),
    colour = couleurs_accessibles["chocolat"]
  ) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = ice_cream_pct, x = as.numeric(episode)),
    colour = bleu_rr
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = chocolate_pct,
      x = as.numeric(episode),
      label = "🍫",
      size = chocolate_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = ice_cream_pct,
      x = as.numeric(episode),
      label = "🍦",
      size = ice_cream_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_fill_gradient(low = "white", high = "#DC7683") +
  scale_size(range = c(3, 10)) +
  facet_grid(year ~ .) +
  theme_rencontresR() +
  theme(geom = element_geom(linetype = 2, linewidth = 0.2))

#13 - Des guides utiles

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = chocolate_pct, x = as.numeric(episode)),
    colour = couleurs_accessibles["chocolat"]
  ) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = ice_cream_pct, x = as.numeric(episode)),
    colour = bleu_rr
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = chocolate_pct,
      x = as.numeric(episode),
      label = "🍫",
      size = chocolate_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = ice_cream_pct,
      x = as.numeric(episode),
      label = "🍦",
      size = ice_cream_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_fill_gradient(
    low = "white",
    high = "#DC7683",
    breaks = c(10, 15, 20, 25),
    limits = c(min(temperatures$max_temp_c), max(temperatures$max_temp_c)),
    labels = function(x) paste0(x, "°C")
  ) +
  scale_size(range = c(3, 10)) +
  facet_grid(year ~ .) +
  guides(fill = "colourbar", size = "none") +
  theme_rencontresR() +
  theme(geom = element_geom(linetype = 2, linewidth = 0.2))

#13 - Des guides utiles

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = chocolate_pct, x = as.numeric(episode)),
    colour = couleurs_accessibles["chocolat"]
  ) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = ice_cream_pct, x = as.numeric(episode)),
    colour = bleu_rr
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = chocolate_pct,
      x = as.numeric(episode),
      label = "🍫",
      size = chocolate_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = ice_cream_pct,
      x = as.numeric(episode),
      label = "🍦",
      size = ice_cream_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès",
    y = "Pourcentage de créations incluant notre ingrédient clé"
  ) +
  scale_y_continuous(breaks = c(0, 25, 50), labels = function(x) {
    paste0(x, "%")
  }) +
  scale_fill_gradient(
    low = "white",
    high = "#DC7683",
    breaks = c(10, 15, 20, 25),
    limits = c(min(temperatures$max_temp_c), max(temperatures$max_temp_c)),
    labels = function(x) paste0(x, "°C")
  ) +
  scale_size(range = c(3, 10)) +
  facet_grid(year ~ .) +
  guides(fill = "colourbar", size = "none") +
  theme_rencontresR() +
  theme(geom = element_geom(linetype = 2, linewidth = 0.2))

#13 - Des guides utiles

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = chocolate_pct, x = as.numeric(episode)),
    colour = couleurs_accessibles["chocolat"]
  ) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = ice_cream_pct, x = as.numeric(episode)),
    colour = bleu_rr
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = chocolate_pct,
      x = as.numeric(episode),
      label = "🍫",
      size = chocolate_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = ice_cream_pct,
      x = as.numeric(episode),
      label = "🍦",
      size = ice_cream_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès",
    x = "Épisode",
    y = "Pourcentage de créations incluant notre ingrédient clé"
  ) +
  scale_y_continuous(breaks = c(0, 25, 50), labels = function(x) {
    paste0(x, "%")
  }) +
  scale_fill_gradient(
    low = "white",
    high = "#DC7683",
    breaks = c(10, 15, 20, 25),
    limits = c(min(temperatures$max_temp_c), max(temperatures$max_temp_c)),
    labels = function(x) paste0(x, "°C")
  ) +
  scale_x_continuous(breaks = c(1:10)) +
  scale_size(range = c(3, 10)) +
  facet_grid(year ~ .) +
  guides(fill = "colourbar", size = "none") +
  theme_rencontresR() +
  theme(geom = element_geom(linetype = 2, linewidth = 0.2))

#13 - Des guides utiles

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = chocolate_pct, x = as.numeric(episode)),
    colour = couleurs_accessibles["chocolat"]
  ) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = ice_cream_pct, x = as.numeric(episode)),
    colour = bleu_rr
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = chocolate_pct,
      x = as.numeric(episode),
      label = "🍫",
      size = chocolate_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = ice_cream_pct,
      x = as.numeric(episode),
      label = "🍦",
      size = ice_cream_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_y_continuous(breaks = c(0, 25, 50), labels = function(x) {
    paste0(x, "%")
  }) +
  scale_fill_gradient(
    low = "white",
    high = "#DC7683",
    breaks = c(10, 15, 20, 25),
    limits = c(min(temperatures$max_temp_c), max(temperatures$max_temp_c)),
    labels = function(x) paste0(x, "°C")
  ) +
  scale_x_continuous(breaks = c(1:10)) +
  labs(
    y = "Pourcentage de créations incluant notre ingrédient clé",
    x = "Épisode"
  ) +
  scale_size(range = c(3, 10)) +
  facet_grid(year ~ .) +
  guides(fill = "colourbar", size = "none") +
  theme_rencontresR() +
  theme(geom = element_geom(linetype = 2, linewidth = 0.2))

#14 - Le texte dans le bon sens

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = chocolate_pct, x = as.numeric(episode)),
    colour = couleurs_accessibles["chocolat"]
  ) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = ice_cream_pct, x = as.numeric(episode)),
    colour = bleu_rr
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = chocolate_pct,
      x = as.numeric(episode),
      label = "🍫",
      size = chocolate_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = ice_cream_pct,
      x = as.numeric(episode),
      label = "🍦",
      size = ice_cream_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_y_continuous(breaks = c(0, 25, 50), labels = function(x) {
    paste0(x, "%")
  }) +
  scale_fill_gradient(
    low = "white",
    high = "#DC7683",
    breaks = c(10, 15, 20, 25),
    limits = c(min(temperatures$max_temp_c), max(temperatures$max_temp_c)),
    labels = function(x) paste0(x, "°C")
  ) +
  scale_x_continuous(breaks = c(1:10)) +
  labs(
    y = "Pourcentage de créations incluant notre ingrédient clé",
    x = "Épisode"
  ) +
  scale_size(range = c(3, 10)) +
  facet_grid(year ~ .) +
  guides(fill = "colourbar", size = "none") +
  theme_rencontresR() +
  theme(
    geom = element_geom(linetype = 2, linewidth = 0.2),
    strip.text.y.right = element_text(angle = 0)
  )

#15 - Un espacement optimisé

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = chocolate_pct, x = as.numeric(episode)),
    colour = couleurs_accessibles["chocolat"]
  ) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = ice_cream_pct, x = as.numeric(episode)),
    colour = bleu_rr
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = chocolate_pct,
      x = as.numeric(episode),
      label = "🍫",
      size = chocolate_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = ice_cream_pct,
      x = as.numeric(episode),
      label = "🍦",
      size = ice_cream_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_y_continuous(breaks = c(0, 25, 50), labels = function(x) {
    paste0(x, "%")
  }) +
  scale_fill_gradient(
    low = "white",
    high = "#DC7683",
    breaks = c(10, 15, 20, 25),
    limits = c(min(temperatures$max_temp_c), max(temperatures$max_temp_c)),
    labels = function(x) paste0(x, "°C")
  ) +
  scale_x_continuous(breaks = c(1:10)) +
  labs(
    y = "Pourcentage de créations incluant notre ingrédient clé",
    x = "Épisode"
  ) +
  scale_size(range = c(3, 10)) +
  facet_grid(year ~ .) +
  guides(fill = "colourbar", size = "none") +
  coord_cartesian(clip = "off") +
  theme_rencontresR() +
  theme(
    geom = element_geom(linetype = 2, linewidth = 0.2),
    strip.text.y.right = element_text(angle = 0)
  )

#15 - Un espacement optimisé

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = chocolate_pct, x = as.numeric(episode)),
    colour = couleurs_accessibles["chocolat"]
  ) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = ice_cream_pct, x = as.numeric(episode)),
    colour = bleu_rr
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = chocolate_pct,
      x = as.numeric(episode),
      label = "🍫",
      size = chocolate_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = ice_cream_pct,
      x = as.numeric(episode),
      label = "🍦",
      size = ice_cream_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_y_continuous(
    expand = expansion(mult = c(0.1, 0.4)),
    breaks = c(0, 25, 50),
    labels = function(x) {
      paste0(x, "%")
    }
  ) +
  scale_fill_gradient(
    low = "white",
    high = "#DC7683",
    breaks = c(10, 15, 20, 25),
    limits = c(min(temperatures$max_temp_c), max(temperatures$max_temp_c)),
    labels = function(x) paste0(x, "°C")
  ) +
  scale_x_continuous(breaks = c(1:10)) +
  labs(
    y = "Pourcentage de créations incluant notre ingrédient clé",
    x = "Épisode"
  ) +
  scale_size(range = c(3, 10)) +
  facet_grid(year ~ .) +
  guides(fill = "colourbar", size = "none") +
  coord_cartesian(clip = "off") +
  theme_rencontresR() +
  theme(
    geom = element_geom(linetype = 2, linewidth = 0.2),
    strip.text.y.right = element_text(angle = 0)
  )

#15 - Un espacement optimisé

temperatures |>
  ggplot(aes(x = episode, y = max_temp_c)) +
  geom_rect(aes(
    xmin = episode - 0.5,
    xmax = episode + 0.5,
    ymin = -Inf,
    ymax = Inf,
    fill = max_temp_c
  )) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = chocolate_pct, x = as.numeric(episode)),
    colour = couleurs_accessibles["chocolat"]
  ) +
  geom_line(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(y = ice_cream_pct, x = as.numeric(episode)),
    colour = bleu_rr
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = chocolate_pct,
      x = as.numeric(episode),
      label = "🍫",
      size = chocolate_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  ggtext::geom_textbox(
    data = episode_analysis |> dplyr::mutate(year = as.numeric(series) + 2009),
    aes(
      y = ice_cream_pct,
      x = as.numeric(episode),
      label = "🍦",
      size = ice_cream_pct
    ),
    hjust = 0.5,
    halign = 0.5,
    fill = NA,
    box.colour = NA
  ) +
  labs(
    title = "Est-ce qu'il fait toujours plus chaud quand c'est la semaine du chocolat ou de la glace?",
    subtitle = "Parce qu'on dirait qu'ils font exprès"
  ) +
  scale_y_continuous(
    expand = expansion(mult = c(0.1, 0.4)),
    breaks = c(0, 25, 50),
    labels = function(x) {
      paste0(x, "%")
    }
  ) +
  scale_fill_gradient(
    low = "white",
    high = "#DC7683",
    breaks = c(10, 15, 20, 25),
    limits = c(min(temperatures$max_temp_c), max(temperatures$max_temp_c)),
    labels = function(x) paste0(x, "°C")
  ) +
  scale_x_continuous(breaks = c(1:10), expand = 0) +
  labs(
    y = "Pourcentage de créations incluant notre ingrédient clé",
    x = "Épisode"
  ) +
  scale_size(range = c(3, 10)) +
  facet_grid(year ~ .) +
  guides(fill = "colourbar", size = "none") +
  coord_cartesian(clip = "off") +
  theme_rencontresR() +
  theme(
    geom = element_geom(linetype = 2, linewidth = 0.2),
    strip.text.y.right = element_text(angle = 0)
  )

#15 - Un espacement optimisé

On pourrait continuer des heures !

  • 🔎 Une interactivité bien réfléchie ({ggiraph} + colour = "transparent")
  • ✨ Une solution pour les contrastes difficiles (ggfx::with_outer_glow())
  • 👩🏻‍🔧 Les graphiques paramétrisés pour revisiter la question des soufflés

À votre tour

15 astuces en 45 minutes




Slides, code et ressources

cararthompson.com/talks

👋

À votre tour





Slides, code et ressources

cararthompson.com/talks

👋