Le tutoriel complet pour créer des graphiques avec R grâce à ggplot2

Si vous voulez tout savoir sur l’utilisation de ggplot2 sous R, vous êtes au bon endroit. Pour illustrer cet article, je vais partir d’un jeu de données disponible sur Kaggle et qui est très utilisé pour apprendre à faire de la Data Science avec R. Si vous ne connaissez pas Kaggle, je vous invite à aller lire cet article. Ici, il s’agit du jeu de données “Iris Species”, qui signifie “Espèces d’Iris”. C’est un très beau jeu de données qui regroupe 150 échantillons de trois espèces d’iris différentes (setosa, versicolor et virginica), avec 50 individus par espèce.  Nous avons 4 informations sur chaque individu : la longueur du sépale, la largeur du sépale, la longueur du pétale et la largueur du pétale.

Définition d’un sépale et un pétale.

Ce dataset est très utilisé car il marche très bien pour apprendre à faire du machine learning, étant donné que ces 4 informations permettent de séparer de manière très claire les individus des trois espèces d’Iris. Allez, on va s’amuser un peu et visualiser tout ça ! 

#1. Importation du jeu de données Iris dans R

Première étape, je lis le fichier que j’ai récupéré sur Kaggle :

Aperçu du jeu de données

Individus Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa

Sepal.Length = Longueur du sépale; Sepal.Width = Largeur du sépale; Petal.Length = Longueur du pétale; Petal.Width = Largeur du pétale

#2. Introduction à la grammaire des graphiques avec ggplot2

Installation du package ggplot2 sous R

Avant toute chose, il faut installer le package ggplot2 et le charger dans l’environnement R, grâce aux deux commandes suivantes :

La grammaire des graphiques

Avant de vous montrer comment créer notre premier graphique avec ggplot2, je vais vous expliquer son principe d’utilisation. Ggplot2 utilise ce qu’on appelle une grammaire des graphiques. Le but est de tout séparer, que ce soit les données, les couleurs, les annotations, etc. Tout sera séparé pour pouvoir très facilement paramétrer chaque couche (ou layer en anglais) du graphique, ce qui fait la force de ce package.

Tout est plus simple avec une image, la voici :

Source : https://blog.gtwang.org/wp-content/uploads/2016/07/ggplot-grammar-of-graphics-stack-1.png
Grammaire des graphiques avec ggplot2.

Les graphiques ggplot2 sont constitués de plusieurs couches. Data correspond au jeu de données entier qui contient les données qu’on souhaite représenter. Une fois ceci défini, on ajoute une seconde couche, appelée Aesthetics. Il s’agit de l’esthétique du graphique, qui permettra de sélectionner les variables de notre jeu de données qu’on souhaite représenter sur le graphique, mais aussi la couleur, la taille ou encore la forme des objets géométriques/statistiques. Ensuite vient la couche Geometry, qui permettra de choisir le type de graphique qu’on veut représenter, comme par exemple un nuage de points, un histogramme, un boxplot, etc. Facets permettra de découper le graphique en plusieurs panneaux, de le sub-diviser en quelques sortes. Statistics permet de faire une transformation statistique sur nos données. Coordinates permet de définir l’espace de représentation des données (par défaut cartésien mais on peut aussi projeter des données sur une carte géographique, ou utiliser des coordonnées polaires). Enfin les thèmes permettent de contrôler tout ce qui est “en dehors” du graphique, par là j’entends le titre, les axes, la couleur de fond, etc.

Représentation textuelle de la grammaire ggplot2

Au niveau de la commande à lancer, voici une représentation textuelle de la grammaire de ggplot2 :

Plot = data + aesthetics + geometry + theme …

Dès qu’on veut ajouter une couche, on utilise le symbole “+” qui permettra de l’ajouter par dessus la couche précédente. En sachant que si on ajoute une couche en modifiant une caractéristique qui avait été définie auparavant dans la commande, la nouvelle couche prend le dessus.

#3. Création d’un graphique basique avec ggplot2

Créons notre premier graphique basique avec les données Iris. Les commandes sont les suivantes :

Ici, on range notre graphique dans la variable g. Pour créer ce graphique, on utilise la fonction ggplot(), à qui on donne notre jeu de données contenu dans la variable iris (qui correspond à la couche Data). Puis on défini les variables à représenter, ici la longueur des pétales en x (abscisse) et la largeur des pétales en y (ordonnée) avec aes (Aesthetics). Une fois qu’on a défini notre jeu de donnée et l’esthétique de notre graphique, les autres layers (ou couches) seront toujours rajoutés avec un “+”. Exemple, à la deuxième ligne, on appelle à nouveau notre graphique g, à qui on ajoute la couche Geometry avec geom_point(), dont la fonction est de représenter les points sous forme de nuage de points (d’où le _point, après geom). Ce layer, geom_point(), est ajouté sur le graphique grâce au “+”. Pour générer le graphique, on envoie juste “g” dans la console, qui sera interprété et le graphique sera généré.

Voici le résultats :

#4. Modifier les formes, couleurs et tailles des points avec ggplot2

Le graphique précédent représente bien ce qu’on voulait représenter, mais il n’est pas très joli. On pourrait vouloir modifier la forme des points, la couleur ou encore la taille. Comme je vous le disais au départ, on peut définir ça dans Aesthetics directement.

Assigner la couleur des points selon une variable avec ggplot2

Si je voulais colorier les points selon l’espèce à laquelle chaque individu (chaque point) appartient, il suffirait d’ajouter cet argument dans l’aesthetics. Ici, on utilise l’argument “color” (pour couleur) et on lui donne le nom de la variable à utiliser pour définir la couleur des points, ici l’espèce (setosa, versicolor ou virgnica). Pour faire simple, Species est une variable catégorielle, c’est à dire qu’elle contient des informations sous forme de 3 catégories ici : les valeurs peuvent être ou setosa OU versicolor OU virginica. Par défaut, ggplot2 va choisir trois couleurs différentes et associera une couleur à chaque point selon l’espèce à laquelle il appartient.

Résultat : 

Grâce aux couleurs, on voit déjà que la longueur et la largeur des pétales permettent de séparer plus ou moins bien les différentes espèces d’Iris. Continuons.

Assigner une forme de points selon une variable avec ggplot2

Pour assigner une forme aux points selon l’espèce, on utilisera l’argument “shape” (pour forme en français), à qui on donne le nom de la variable d’intérêt, ici Species.

Résultat :

Modifier la taille des points avec ggplot2

Enfin, pour modifier la taille des points, vous pouvez le définir dans aes, mais je vais vous montrer pourquoi ça n’est pas joli dans notre cas :

On voit que la taille est dans la légende, mais ça n’a pas d’intérêt ici. Alors je vais vous montrer comment écraser ça en mettant la taille dans geom_point(). Geom_point() peut prendre les arguments color, shape, size tout comme aes(). Mais comme on ajoute le layer geom_point() sur le graphique après avoir défini aes(), il écrase ce qui était défini dans aes(). Et comme la légende est gérée par aes() (l’esthétique du graphique, rappelez vous), alors la taille n’apparaîtra plus sur la légende, mais la taille sera bien prise en compte grâce à geom_point(). 

Résultat :

Créer un gradient de couleur selon une variable avec ggplot2

Enfin, si plutôt que d’avoir une couleur par espèce (qui est une variable catégorielle avec 3 espèces, donc 3 couleurs), vous voulez faire un gradient de couleur sur une variable quantitative, par exemple la longueur des pétales, c’est faisable. Il suffit de donner le nom de la variable à color, ici Petal.Length, ce qui créera un gradient de couleur puisque ce sont des valeurs numériques (et non plus un nombre défini de valeurs comme c’est le cas pour les variables catégorielles). Pour pouvoir définir le jeu de couleurs de ce gradient, il suffit de rajouter l’élément “scale_color_gradient”Il suffit ensuite de spécifier que l’échelle commence au bleu (low, valeur la plus basse) et va vers le rouge plus les valeurs augmentent (high). Les scales (pour échelles) sont très utilisées pour définir les échelles de couleur, et comme on ajoute scale_color_gradient après aes(), c’est cette dernière information de couleur qui est prise en compte.

Résultat :

Ici, on voit clairement que l’espèce Setosa a de petites pétales, puis vient l’espèce Versicolor puis Virginica.

#5. Modifier la légende des graphiques avec ggplot2

Pour modifier la légende, on utilisera les thèmes, dont on a parlé plus haut. Rappelez vous, le thème va modifier tout ce qu’il y a “en dehors” du graphique, c’est à dire la légende, la couleur d’arrière plan du graphique, les axes, etc. Par exemple, pour déplacer la légende qui est à droite du graphique et la positionner au dessus du graphique, on utiliserait les commandes ci-dessous. On utilise “+” pour ajouter une couche au graphique, on utilise “theme” pour spécifier qu’on va modifier le thème du graphique et on utilise l’argument “legend.position” (position de la légende en français) qu’on met à “top” (en haut, en français).

Résultat :

Si on veut modifier la couleur, la texture (gras, italique) et la taille du titre de la légende, il faut ajouter à nouveau un thème, avec l’argument “legend.title” (titre de la légende) et les arguments “colour” (couleur), “size” (taille) et “face” (texture). 

Résultat :

Enfin, si on veut modifier la couleur, taille et texture des labels (c’est à dire les valeurs de la légende), on utilisera encore une fois un thème avec l’argument legend.text.

Résultat : 

Petite astuce, si vous voulez supprimer la légende de votre graphique ggplot2, il suffit de rajouter la couche suivante à votre graphique :

Les possibilités de modifications sont extrêmement vastes. Heureusement, il existe un aide-mémoire en français pour le package ggplot2, que vous pouvez trouver ici.

#6. Ajouter des axes et des titres aux graphiques avec ggplot2

Pour ajouter un titre principal et des titres d’axes à notre graphique, on utilisera “+xlab” pour l’axe des abscisses, “+ylab” pour l’axe des ordonnées et pour ajouter un titre principal, on utilisera “+ggtitle”.

Résultat :

Enfin, pour modifier la couleur et la texture des axes et du titre, on utilisera un thème à chaque fois. Plot.title pour modifier l’apparence du titre et axis.title pour modifier l’apparence des titres des axes.

Résultat :

#6. Combiner plusieurs graphes grâce à Facet

Lorsqu’on veut sub-diviser notre graphique, on peut utiliser le layer Facet. Par exemple, imaginons que je veuilles un cadran par espèce et séparer mon graphique en trois selon l’espèce à laquelle appartiennent les points. 

facet_wrap va sub-diviser notre graphique selon la variable Species, puis le premier thème permettra de colorier le texte en bleu, de le mettre en gras et taille 10.

Ici on arrive encore mieux à représenter le fait qu’on puisse séparer nos données selon l’espèce à laquelle elles appartiennent. Les iris de l’espèce Setosa ont globalement une largeur/longueur de pétales petite, versicolor moyenne et virginica grande.

#7. Les différents types de graphiques avec ggplot2

Enfin, je vous disais au début que le layer Geometry permettait de choisir le type de graphique qu’on voulait représenter. Depuis le début nous utilisons geom_point() qui permet de représenter nos données sous forme de nuages de points. Mais si on voulait représenter ces données sous forme d’un histogramme, on pourrait utiliser geom_histogram() :

Résultat :

Ou encore geom_boxplot() pour représenter nos données sous forme de boxplot (boites à moustaches) :

Résultat :

#8. BONUS : Rendre vos graphiques interactifs avec Plotly

Il existe un super package sous R qui s’appelle plotly et qui permet de rendre les graphiques générés avec ggplot2 … interactifs ! Voici un exemple sur nos données : 

Résultat :

Sur l’article, l’image est fixe. Mais si vous essayez chez vous, vous verrez qu’en passant la souris sur le graphique, de nouvelles informations apparaissent. Sur l’exemple, plotly permet d’afficher les valeurs de la boite à moustache quand on passe la souris dessus, ce qui est vraiment pratique !

Voilà, j’espère que cet article vous aura fait découvrir pleins de nouvelles fonctionnalités avec ggplot2 !

N’hésitez pas à poser vos questions concernant ggplot2 ici, et je vous dis à la prochaine 🙂

Amandine de DataScienceR

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *