Chapitre 8 Les thèmes

Les thèmes ggplot2 vous permettent de modifier l’apparence de vos graphiques. Derrière l’apparence, on désigne tout ce qui n’est pas relatif aux données, comme les polices de caractère, les grilles, l’arrière plan :

  • Quelle police de caractère pour le titre du graphique ? Pour le titre de l’axe des x ?
  • Quelle taille de police ?
  • Quelle couleur pour l’arrière plan ?
  • Quel type de ligne pour les grilles ?

Il existe des thèmes prédéfinis dans ggplot que l’on peut déjà utiliser. Par exemple : theme_classic(), theme_bw(), theme_dark(), …

Des packages externes permettent d’enrichir cette collection de thèmes, par exemple ggthemes ou hrbrthemes.

Lorsque l’on souhaite garder une cohérence entre plusieurs graphiques, le mieux est d’en définir un à part pour l’appeler ensuite. La fonction de {ggplot2} qui vous permet de modifier le thème par défaut est la fonction [theme()](http://ggplot2.tidyverse.org/reference/theme.html). Chaque élément va ensuite pouvoir être modifié finement.

Ce schéma de Heny Wang permet de bien synthétiser l’ensemble des éléments thémables. ]

Voir l’aide de la fonction theme() et ses nombreux arguments sur le site de présentation du package ggplot2.

Et nous allons ci dessous le détailler.

8.1 Les fonctions “element”

Elle utilise 4 types de fonctions :

  • element_text() : pour toutes les étiquettes
PARAMÈTRE VALEUR
family la famille de la police
face le type de police (“plain”, “italic”, “bold”, “bold.italic”)
colour couleur
size taille en points
hjust justification horizontale, dans [0, 1]
vjust justification verticale, dans [0, 1]
angle angle, dans [0, 360]
lineheight hauteur de ligne (pour l’espacement entre les lignes)
  • element_rect() : pour les fonds et les cadres,
PARAMÈTRE VALEUR
fill la couleur de remplissage
colour la couleur de la bordure
size la taille de la bordure
linetype le type de ligne (“blank”, “solid”, “dashed”, “dotted”, “dotdash”, “longdash”, “twodash)
  • element_line() : pour toutes les lignes tracées,
PARAMÈTRE VALEUR
colour la couleur de ligne
size la taille
linetype le type de ligne (“blank”, “solid”, “dashed”, “dotted”, “dotdash”,“longdash”, “twodash)
lineend le type de fin de ligne (“round”, “butt” ou “square”)
  • element_blank() : permet de ne rien dessiner.

8.2 Les composantes

Il s’agit des différents éléments modifiables dans le thème. Par exemple :

  • Axes axis.line, axis.text.x, axis.text.y, axis.ticks, axis.title.x, axis.title.y,…

  • Légende legend.background, legend.key, legend.text, legend.title,…

  • Fond de graphe panel.background, panel.border, panel.grid.major, panel.grid.minor,…

  • etc

8.3 Quelques exemples

gg <- ggplot(ODD_graphique1) +
  geom_point(aes(x = log(Gross_Domestic_Product_GDP),
    y = log(Maternal_mortality_ratio),
    color = Continent)) +
  labs(title = "Mortalité maternelle en fonction du PIB par habitant",
    subtitle = "En 2015",
    x = "PIB",
    y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
    caption = "Source : ODD / ONU")
  • Changer le fond du graphique panel_background
gg +
  theme(panel.background = element_rect(fill = "Lavender", colour = "black"))

  • Changer l’apparence du quadrillage panel_background
gg +
  theme(panel.grid.major = element_line(colour = "gray", size = 0.5, linetype = "dashed"))

  • Changer l’apparence des étiquettes des axes axis_xxx()
gg +
  theme(axis.text.x = element_text(colour = "blue", angle = 45),
    axis.title = element_text(face = "bold", colour = "orange"))

Certains changements de paramètres ne nécessitent pas l’utilisation de fonction element_() . Par exemple, pour changer la position de la légende legend.xxx()

gg +
  theme(legend.position = "left", legend.title = element_blank())

8.4 Modifier le thème par défaut

La fonction theme_set() vous permet de définir un thème par défaut pour l’ensemble de vos graphiques.

theme_set(theme_dark())
# Le theme_dark() sera appliqué à tous les graphiques à partir de maintenant

ggplot(ODD_graphique1) +
  geom_point(aes(x = log(Gross_Domestic_Product_GDP),
    y = log(Maternal_mortality_ratio),
    color = Continent)) +
  labs(title = "Mortalité maternelle en fonction du PIB par habitant",
    subtitle = "En 2015",
    x = "PIB",
    y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
    caption = "Source : ODD / ONU")

# Réinitialisation d'un thème par défaut, car le noir c'est triste!
theme_set(theme_grey())

8.5 Créer son propre thème

Un thème est une fonction R qui va prendre en paramètre des éléments que vous souhaitez pouvoir faire varier et fixer des éléments que vous souhaitez avoir comme rendu par défaut. Créons un thème avec un fond vert pour le ministère de la transition écologique et solidaire. On rajoute un paramètre pour la taille de la police du titre du graphique.

library(hrbrthemes)
mon_theme <- function(taille_police = 14) {
  theme_bw() +
    theme(plot.title = element_text(color = "white", size = taille_police, face = "bold"),
      text = element_text(color = "white"),
      axis.text = element_text(color = "white"),
      panel.background = element_rect(fill = "lightgreen", colour = "lightgreen"),
      plot.background = element_rect(fill = "#006400", colour = "lightgreen"),
      legend.background = element_rect(fill = "lightgreen", colour = "lightgreen"),
      legend.key = element_blank())

}

ggplot(ODD_graphique1) +
  geom_point(aes(x = log(Gross_Domestic_Product_GDP),
    y = log(Maternal_mortality_ratio),
    color = Continent)) +
  labs(title = "Mortalité maternelle en fonction du PIB par habitant",
    subtitle = "En 2015",
    x = "PIB",
    y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
    caption = "Source : ODD / ONU") +
  mon_theme()

8.6 Thème - package gouvdown

{gouvdown} est un package créé par la communauté d’agents de l’Etat (Spyrales).

Il s’agit d’ensemble de fonctionnalités qui permet de produire des documents/éléments avec une charte graphique prenant en compte la marque État.

L’utilisation de theme_gouv() permet d’appliquer cette charte.

library(gouvdown)

ggplot(ODD_graphique1) +
  geom_point(aes(x = log(Gross_Domestic_Product_GDP),
    y = log(Maternal_mortality_ratio),
    color = Continent)) +
  labs(title = "Mortalité maternelle en fonction du PIB par habitant",
    subtitle = "En 2015",
    x = "PIB",
    y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
    caption = "Source : ODD / ONU") +
  theme_gouv(plot_title_size = 15,
    subtitle_size = 11,
    base_size = 10)

NB: Pour les cartes, theme_gouv_map() sera privilégié.

Le thème ne joue pas sur la palette de couleurs employée par défaut, RDV au chapitre suivant.

8.7 Exercice 2

A partir des données de la table ODD_graphique1 (ODD.RData), reprendre le nuage de point obtenu à partir des données ODD : taux de mortalité maternelle (Maternal_mortality_ratio) en fonction du produit intérieur brut (Gross_Domestic_Product_GDP) (Chapitre 5.1) En modifier le thème : - insérer un titre de couleur, en gras, centré par rapport au graphe, - indiquer la source (ODD) et modifier sa taille, - changer les titres des axes et leurs tailles, - modifier la couleur de fond du graphe, - modifier le type de quadrillage (pointillés).

Résultat attendu :