8  Améliorer ses graphiques

Nous avons vu au Chapitre 3 comment explorer rapidement un tableau de données à l’aide de graphiques. Dans le présent chapitre, nous verrons maintenant comment les personnaliser, pour les rendre dans un état acceptable pour être insérés dans un rapport ou un article scientifique.

8.1 Labo : Changer le thème du graphique

Le premier changement que vous serez peut être appelé à apporter à vos graphiques est d’en changer le thème. Avant de vous casser la tête à changer la couleur de fond, enlever la grille, etc., commencez par explorer les thèmes fournis par ggplot21.

Outre le thème de base, je vous conseille de commencer par regarder le thème classique, qui ressemble beaucoup aux graphiques de base de R (et donc à ceux que beaucoup de gens s’attendent de voir) :

library(tidyverse)
── Attaching core tidyverse packages ──────────────────
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ───────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(palmerpenguins)

ggplot(data = penguins) +
  geom_point(mapping = aes(x = body_mass_g, y = flipper_length_mm)) +
  theme_classic()
Warning: Removed 2 rows containing missing values or values
outside the scale range (`geom_point()`).

Les thèmes de ggplot2 sont définis comme une couche que l’on ajoute au reste du graphique, à l’aide du +.

De mon côté, j’ai tendance à souvent utiliser le thème minimal, que je trouve aussi clair que celui de base, mais moins chargé :

ggplot(data = penguins) +
  geom_point(mapping = aes(x = body_mass_g, y = flipper_length_mm)) +
  theme_minimal()
Warning: Removed 2 rows containing missing values or values
outside the scale range (`geom_point()`).

Peu importe le thème que vous choisirez, vous économiserez beaucoup de temps de fignolage en démarrant du thème le plus près possible du résultat que vous recherchez.

Pour les curieux, sachez qu’il existe aussi des librairies de thèmes additionnels qui vous permettent de répéter des thèmes classiques comme ceux du Wall Street Journal et d’Excel2 alors que d’autres librairies vous permettent de créer un thème basé sur certaines séries télé, par exemple Les Simpsons, Bob L’Éponge ou Game of Thrones3.

8.2 Labo : Changer les étiquettes

Un élément important qui fera passer vos graphiques de “exploratoire” à “prêt à publier” est l’ajout d’étiquettes. Les premières, à changer systématiquement, sont celles définissant les axes X et Y. La fonction pour modifier les axes dans ggplot2 se nomme labs (labels) et s’utilise comme ceci :

ggplot(data = penguins) +
  geom_point(mapping = aes(x = body_mass_g, y = flipper_length_mm)) +
  labs(x = "Poids (g)", y = "Longueur des ailes (mm)")
Warning: Removed 2 rows containing missing values or values
outside the scale range (`geom_point()`).

Ces étiquettes doivent être dans la langue utilisée dans le rapport (donc en français pour vos travaux), et mentionner les unités utilisées pour chacune des variables.

La fonction labs permet aussi d’attribuer des étiquettes pour les autres propriétés de nos couches graphiques, en ré-utilisant exactement la même terminologie que dans la couche graphique :

ggplot(data = penguins) +
  geom_point(mapping = aes(
    x = body_mass_g, 
    y = flipper_length_mm,
    color = island,
    shape = species
  )) +
  labs(
    x = "Poids (g)",
    y = "Longueur des ailes (mm)",
    color = "Île",
    shape = "Espèce"
  )
Warning: Removed 2 rows containing missing values or values
outside the scale range (`geom_point()`).

8.3 Labo : Palette de couleurs

Lorsque vous assignez une variable de votre tableau de données à la propriété color ou fill, il est possible que vous ayez envie (ou besoin) d’utiliser des couleurs autres que celles fournies par ggplot2. Il existe deux stratégies pour y arriver, soit en utilisant des palettes de couleurs pré-fabriquées, ou soit en choisissant une couleur spécifique pour chaque valeur de votre variable.

Pour modifier la palette de couleur d’une propriété graphique, utilisez la fonction scale_colour_brewer, comme ceci :

ggplot(data = penguins) +
  geom_point(mapping = aes(x = body_mass_g, y = flipper_length_mm,color = species)) +
  scale_color_brewer(palette = "Dark2")
Warning: Removed 2 rows containing missing values or values
outside the scale range (`geom_point()`).

Vous pouvez avoir un aperçu de la liste des palettes de couleurs disponibles dans le livre gratuit R for Data Science4.

Plutôt que de choisir une palette de couleur pré-fabriquée, vous pouvez aussi choisir vous même les couleurs, à l’aide de la fonction scale_color_manual :

ggplot(data = penguins) +
  geom_point(mapping = aes(x = body_mass_g, y = flipper_length_mm,color = species)) +
  scale_color_manual(values = c(
    "Gentoo" = "red", 
    "Adelie" = "green",
    "Chinstrap" = "blue"
  ))
Warning: Removed 2 rows containing missing values or values
outside the scale range (`geom_point()`).

Remarquez que pour cette fonction aussi, les paires de valeurs doivent être enveloppées par la fonction c. Comme mentionné au Chapitre 3, la plupart des noms de couleurs qui vous viendront à l’esprit sont définis dans R, mais en cas de doute, vous pouvez facilement en trouver des listes sur internet5. Aussi, essayez lorsque vous choisissez vos couleurs, d’avoir une petite pensée pour vos collègues daltoniens, qui représentent environ 5 % de la population.

8.4 Labo : Sauvegarder correctement

Vous avez probablement remarqué qu’au-dessus de la fenêtre graphique de RStudio, il existe un bouton Export vous permettant de conserver vos graphiques dans des fichiers externes (jpg, pdf, etc.) Bien que très pratique, cette façon de faire comporte aussi certains désavantages, en particulier au niveau de la reproductibilité. Si vous avez à refaire un graphique (et ça arrive plus souvent qu’on le voudrait), vous devrez remettre la fenêtre exactement de la même façon et choisir exactement le même nombre de pixels dans chaque dimensions. De plus, vous n’avez pas un contrôle indépendant de la résolution et des proportions du graphique.

C’est pourquoi je vous propose pour sauvegarder vos graphiques d’utiliser la fonction ggsave. Cette fonction sauvegarde dans un fichier le dernier graphique ggplot2 que vous avez fait afficher, comme ceci :

ggplot(data = penguins) +
  geom_point(mapping = aes(x = body_mass_g, y = flipper_length_mm))
Warning: Removed 2 rows containing missing values or values
outside the scale range (`geom_point()`).

ggsave("resultat.jpg")
Saving 7 x 5 in image
Warning: Removed 2 rows containing missing values or values
outside the scale range (`geom_point()`).

R vous répond alors qu’il a créé un fichier pour vous en nommant ses dimensions.

Si vous allez dans votre dossier de travail (voir la Section 7.3 pour un rappel), vous devriez retrouver un fichier nommé resultat.jpg avec votre graphique à l’intérieur. L’extension choisie (jpg, gif,png,pdf) déterminera le format du fichier de sortie.

La première chose à faire lorsque vous sauvegardez un graphique est de déterminer les proportions que votre graphique doit présenter. Vous contrôlez ces proportions à l’aide des arguments width (largeur) et height (hauteur). Par défaut, ggplot2 s’attend à recevoir ces valeurs en pouces :

ggsave(filename = "2x2.jpg", width = 2, height = 2)
Warning: Removed 2 rows containing missing values or values
outside the scale range (`geom_point()`).
ggsave(filename = "8x8.jpg", width = 8, height = 8)
Warning: Removed 2 rows containing missing values or values
outside the scale range (`geom_point()`).

Comparez le résultat de ces deux fonctions :

R essaie d’adapter les proportions des éléments pour qu’ils soient beaux dans un graphique de la taille spécifiée. Dans le cas du 2x2, les éléments sont beaucoup plus grands toutes proportions gardées, alors que dans le 8x8, ils sont beaucoup plus petits. Vous pouvez aussi expérimenter avec des proportions plus rectangulaires, par exemple 3x5, 1x8, etc…

Une fois que vous avez déterminé la bonne taille pour vos éléments graphiques, vous pouvez contrôler la qualité (la résolution) de votre graphique, à l’aide de l’argument dpi. DPI est l’abréviation de dots per inch, ou en français points par pouce. Il contrôle la pixellisation de votre graphique.

ggsave(filename = "72.jpg", width = 2, height = 2, dpi = 72)
Warning: Removed 2 rows containing missing values or values
outside the scale range (`geom_point()`).
ggsave(filename = "1200.jpg", width = 2, height = 2, dpi = 1200)
Warning: Removed 2 rows containing missing values or values
outside the scale range (`geom_point()`).

Le premier graphique sera pixellisé, et le deuxième bien net :

La résolution choisie sera une question de compromis. Plus vous augmentez la valeur de DPI, plus votre graphique sera net, mais il sera aussi plus lourd. Si vous pensez imprimer votre graphique, on recommande en général de choisir une résolution de 300 DPI. Moins que ça et ça risque de paraître pixellisé, mais plus que ça votre fichier risque d’être inutilement lourd.


  1. https://r4ds.had.co.nz/graphics-for-communication.html#fig:themes↩︎

  2. https://yutannihilation.github.io/allYourFigureAreBelongToUs/ggthemes/↩︎

  3. https://ryo-n7.github.io/2019-05-16-introducing-tvthemes-package/↩︎

  4. https://r4ds.had.co.nz/graphics-for-communication.html#fig:brewe↩︎

  5. https://derekogle.com/NCGraphing/img/colorbynames.png↩︎