Guide de survie ggplot2 à destination des datajournalistes (et des autres aussi)

Tags : Actualités

Lors de son intervention récente à useR! 2016, Andrew Flowers de FiveThirtyEight, plateforme de datajournalisme, chantait les louanges de ggplot2, un package incontournable dans son quotidien. Vous vous en doutiez, nous partageons à 200% son amour pour ce puissant package du tidyverse — ou de l’ordocosme, pour les français. C’est pourquoi nous avons décidé aujourd’hui de vous offrir un guide de survie de ggplot2, ou « comment créer une dataviz de A à Z ».

« R is used in every step of the data journalism process » avance Andrew Flowers. De la manipulation à la visualisation, l’équipe du site fait appel à R à toutes les étapes de la rédaction de ses articles. Vous vous en souvenez, nous vous avons déjà proposé un tuto sur la manipulation de données avec dplyr. Voici donc aujourd’hui un how-to sur la visualisation avec ggplot2 pour les datajournalistes… mais aussi pour les autres !

 

ggplot2, un peu d’histoire

Package incontournable du tidyverse, ggplot a été développé par Hadley Wickham en 2005, avant de disparaitre en 2008. La version 2 (ggplot2, vous vous en doutiez) a quant à elle été mise en ligne en 2007, et ne cesse d’évoluer depuis. « Mais du coup, c’est quoi ggplot2 ? Ça peut me servir ou c’est encore un truc gadget ? » Détrompe-toi, lecteur, ggplot2 est loin d’être un outil superflu !

Inspiré des principes de la grammar of graphics de Leland Wilkinson, ce package vous permet de construire, pas à pas (aka : par couches), des visualisations des plus simplistes aux plus perfectionnées. Le point fort de ce package ? Vous pouvez travailler avec une grande modularité sur chaque élément de votre visualisation : ajouter, modifier, supprimer… Mais bref, mettons la main à la pâte !

 

 

Créer une visualisation avec ggplot2, étape par étape

Comme nous vous le disions plus haut, ggplot2 travaille par « couche » à la création de vos graphiques. Ces couches se regroupent en cinq grandes familles, que nous allons explorer pas à pas. Mais avant de nous lancer, commençons par… l’installation !

install.packages("ggplot2")
#Ou pour la version en développement :
devtools::install_github("tidyverse/ggplot2")

Comme vous le savez, nous aimons travailler par l’exemple. Nous allons donc imaginer que nous préparons un article sur les horodateurs de la ville de Rennes. Go go go !

rennes <- read.csv2("https://data.rennesmetropole.fr/explore/dataset/horodateurs-sur-la-ville-de-rennes/download/?format=csv&timezone=Europe/Berlin&use_labels_for_header=true", stringsAsFactors = FALSE) %>% 
  thinkr::clean_names()

Couche 1 : « data & aesthetics »

La première ligne de votre code ggplot, (la première couche), indique à la fonction les données de base sur lesquelles s’appuieront toutes les couches suivantes. Vous devez les construire en suivant le format ggplot(data, aes(x = X, y = Y, col = col, fill = fill, size = size)) — les éléments col, fill et size représentant les variables que vous souhaitez affecter aux couleurs, à la taille ou au remplissage de vos éléments.

(À noter que vous pouvez utiliser ggplot(data)+ aes(x = X, y = Y, col = col, fill = fill, size = size) — mais cette forme reste moins courante).

library(ggplot2)
ggplot(rennes, aes(x = nb_places, fill = zone_tarif))

Voilà, vous obtenez… un graphe gris… vide. En réalité, vous venez de poser les bases de votre visualisation, la « carte » sur laquelle vous allez venir afficher vos données, à partir de la couche n°2.

Couche 2 : « geom »

Cette seconde couche correspond aux éléments visuels qui représenteront vos données. C’est à cette étape que vous devrez choisir un geom (il en existe plus de 40) qui visualisera vos données : barres, points, histogramme… vous avez l’embarras du choix ! Ici, nous avons choisi des barres.

ggplot(rennes, aes(x = nb_places, fill = zone_tarif)) + 
  geom_bar()

Vous pouvez également utiliser ces couches pour afficher d’autres données, ajuster la position de vos éléments, ou encore projeter une transformation statistique, en fonction de vos besoins.

Couche 3 : « scale »

Cette troisième couche vous permet de contrôler les paramètres d’affichage de votre visualisation, sur deux niveaux : les axes, et les projections des données. Autrement dit, quelles sont les limites des axes ? Quel est le format des chiffres utilisés sur ces axes ? Quelles couleurs sont projetées ? Quelles sont les échelles des axes ? etc.

Par exemple, nous pouvons changer l’échelle de couleur des points, en fournissant la nôtre :

ggplot(rennes, aes(x = nb_places, fill = zone_tarif)) + 
  geom_bar() +
  scale_fill_manual(values = c("#973232", "#1E5B5B"))

Il est également possible de jouer sur les limites, pour zoomer sur une zone particulière :

ggplot(rennes, aes(x = nb_places, fill = zone_tarif)) + 
  geom_bar() +
  scale_fill_manual(values = c("#973232", "#1E5B5B")) +
  scale_x_continuous(limits = c(0, 45)) 

Couche 4 : « coord »

La couche suivante, peut-être moins couramment utilisée, vous permet de choisir le système de coordonnées sur lequel sont projetées vos données. Par défaut, votre ggplot utilisera le système cartésien, et sera parfaitement adapté à la majorité de vos besoin.

Couche 5 : « facet »

Le « faceting » fait partie des atouts à garder en tête lors de la création de votre ggplot : cette couche vous permet de séparer votre fenêtre en plusieurs visualisations, selon un facteur défini. Par exemple :

ggplot(rennes, aes(x = nb_places, fill = zone_tarif)) + 
  geom_bar() +
  scale_fill_manual(values = c("#973232", "#1E5B5B")) +
  scale_x_continuous(limits = c(0, 45))  + 
  facet_grid(rows = vars(zone_tarif))

 

Le thème

Il ne s’agit pas d’une couche à proprement parler, mais le thème est un véritable atout « design » pour vos dataviz. Cette fonction, qui commence par theme(), vous permet de personnaliser tous les éléments visuels : titres, tailles des axes, légende, couleur de fond… etc.

Les possibilités de personnalisation du thème sont vastes, et nous vous conseillons de vous rendre sur la page dédiée pour en connaître tous les détails. À noter que ggplot2 vient avec une dizaine de thèmes prédéfinis (9, pour être précis : puis theme_grey(), theme_gray(), theme_bw(), theme_linedraw(), theme_light(), theme_minimal(), theme_classic(), theme_dark(), theme_void())

ggplot(rennes, aes(x = nb_places, fill = zone_tarif)) + 
  geom_bar() +
  scale_fill_manual(values = c("#973232", "#1E5B5B")) +
  scale_x_continuous(limits = c(0, 45))  + 
  facet_grid(rows = vars(zone_tarif)) + 
  theme_bw()

 

 

Shortcuts, et pistes pour aller plus loin

Pour vous faciliter la tâche, ggplot2 a été conçu avec une série de raccourcis pour personnaliser votre visualisation. Le plus utile ? labs(), qui vous permettra de changer le titrage :

ggplot(rennes, aes(x = nb_places, fill = zone_tarif)) + 
  geom_bar() +
  scale_fill_manual(values = c("#973232", "#1E5B5B")) +
  scale_x_continuous(limits = c(0, 45))  + 
  facet_grid(rows = vars(zone_tarif)) + 
  theme_bw() + 
  labs(
    title = "Horodateurs Rennais", 
    subtitle = "Données via Open Data Rennes", 
    caption = "Thinkr.fr", 
    fill = "Zone tarif")

 

 

ggplot layers

Besoin de garder en tête la répartition des couches ? Imprimer vous quelques stickers de ce pense-bête 😉

Et pour en savoir plus, creuser les différentes couches et créer des ggplots encore plus personnalisés, n’hésitez pas à consulter ces lectures complémentaires :

La documentation officielle
Le site officiel
L’ouvrage de Hadley Wickham (indispensable)
Le R Graphic Cookbook
La cheatsheet traduite en français

Et pour en savoir encore plus… appelez nous ! Nous pourrons vous proposer une formation visualisation de données avec R !


À propos de l'auteur

Colin Fay

Colin Fay

Data scientist & R Hacker


Commentaires


À lire également