En chargeant tidyverse, vous avez également obtenu l'accès à un data frame appelé mpg, abréviation de miles per gallon. Il contient des données sur la consommation de carburant de voitures et se prête bien aux exercices ci-dessous. Ces données ont été recueillies par l'US EPA (Environmental Protection Agency) et portent sur 38 modèles de voitures différents (https://fueleconomy.gov/).
Si tidyverse n'est pas encore installé, installez-le avec la commande suivante :
install.packages("tidyverse")Chargez tidyverse :
library(tidyverse)Affichez les premières lignes des données :
mpg| manufacturer | model | displ | year | cyl | trans | drv | cty | hwy | fl |
|---|---|---|---|---|---|---|---|---|---|
| audi | a4 | 1.8 | 1999 | 4 | auto(l5) | f | 18 | 29 | p |
| audi | a4 | 1.8 | 1999 | 4 | manual(m5) | f | 21 | 29 | p |
| audi | a4 | 2.0 | 2008 | 4 | manual(m6) | f | 20 | 31 | p |
| audi | a4 | 2.0 | 2008 | 4 | auto(av) | f | 21 | 30 | p |
| audi | a4 | 2.8 | 1999 | 6 | auto(l5) | f | 16 | 26 | p |
| audi | a4 | 2.8 | 1999 | 6 | manual(m5) | f | 18 | 26 | p |
| audi | a4 | 3.1 | 2008 | 6 | auto(av) | f | 18 | 27 | p |
| audi | a4 quattro | 1.8 | 1999 | 4 | manual(m5) | 4 | 18 | 26 | p |
| audi | a4 quattro | 1.8 | 1999 | 4 | auto(l5) | 4 | 16 | 25 | p |
| audi | a4 quattro | 2.0 | 2008 | 4 | manual(m6) | 4 | 20 | 28 | p |
Premières lignes de mpg.
Les données mpg
Les données mpg comptent 234 lignes et les 11 variables suivantes :
- manufacturer : manufacturer name
- model : model name
- displ : engine displacement, in litres
- year : year of manufacture
- cyl : number of cylinders
- trans : type of transmission
- drv : the type of drive train, where f = front-wheel drive, r = rear wheel drive, 4 = 4wd
- cty : city miles per gallon
- hwy : highway miles per gallon
- fl : fuel type
- class : "type" of car
Pour que le code des exercices ci-dessous reste concis, nous ne spécifierons aucun libellé avec labs() avant que le graphique soit terminé. Dans l'exemple ci-dessous, nous créons un graphique avec ggplot(). Dans ggplot(), nous indiquons que les données proviennent de mpg et nous utilisons aes() pour associer displ à l'axe des x et hwy à l'axe des y. Nous ajoutons ensuite geom_point(), qui représente les valeurs de x et y par des points. Il n'est pas nécessaire d'indiquer le mappage esthétique (aes()) dans geom_point(), car il est automatiquement hérité de ggplot().
ggplot(data = mpg, aes(x = displ, y = hwy)) +
geom_point()
Vous venez de découvrir toute la beauté de ggplot(), à savoir la possibilité de construire un graphique par couches. Le graphique ci-dessus ne comporte qu'une seule couche, geom_point().
Mappage esthétique (aesthetic mapping)
En construisant un graphique par couches, nous pouvons contrôler les données affichées dans chaque couche. Dans le graphique suivant, nous créons des points distincts pour les voitures dont la consommation est supérieure ou inférieure à la moyenne de consommation de carburant (hwy). Notez que nous ne spécifions pas aes() dans ggplot(), mais dans chaque geom_point().
## Calculer la moyenne de la consommation de carburant (hwy)
median_hwy <- median(mpg$hwy)
## Créer le graphique
ggplot() +
# Voitures dont la consommation est supérieure ou égale à la médiane
geom_point(data = filter(mpg, hwy>=median_hwy),
aes(x = displ, y = hwy),
color="gold1",
size=2) +
# Voitures dont la consommation est inférieure à la médiane
geom_point(data = filter(mpg, hwy<median_hwy),
aes(x = displ, y = hwy),
color="cyan4",
size=2)
Nous ajoutons ensuite une ligne horizontale qui indique la position de la moyenne sur l'axe des y. Cela se fait avec geom_hline() à la ligne 16.
## Calculer la moyenne de la consommation de carburant (hwy)
median_hwy <- median(mpg$hwy)
## Créer le graphique
ggplot() +
# Pour les voitures dont la consommation est supérieure ou égale à la médiane
geom_point(data = filter(mpg, hwy>=median_hwy),
aes(x = displ, y = hwy),
color="gold1",
size=2) +
# Pour les voitures dont la consommation est inférieure à la médiane
geom_point(data = filter(mpg, hwy<median_hwy),
aes(x = displ, y = hwy),
color="cyan4",
size=2) +
geom_hline(yintercept=median_hwy)
Nous poursuivons en ajoutant un texte (avec geom_label()) qui affiche la valeur médiane sur la ligne horizontale. Le texte doit être placé tout à gauche sur l'axe des x et à la hauteur de la médiane sur l'axe des y. La fonction geom_label() possède l'argument label, qui correspond au texte à afficher sur le graphique ; dans le cas présent, il s'agit tout simplement de la valeur médiane (ligne 17). Notez ci-dessous que nous indiquons « tout à gauche » sur l'axe des x en écrivant x=-Inf (negative infinity). Pour placer un élément tout à droite sur l'axe des x, on indique au contraire x=Inf. Ainsi, nous n'avons pas besoin d'identifier nous-mêmes la plus petite et la plus grande valeur de l'axe des x.
## Calculer la moyenne de la consommation de carburant (hwy)
median_hwy <- median(mpg$hwy)
## Créer le graphique
ggplot() +
# Pour les voitures dont la consommation est supérieure ou égale à la médiane
geom_point(data = filter(mpg, hwy>=median_hwy),
aes(x = displ, y = hwy),
color="gold1",
size=2) +
# Pour les voitures dont la consommation est inférieure à la médiane
geom_point(data = filter(mpg, hwy<median_hwy),
aes(x = displ, y = hwy),
color="cyan4",
size=2) +
geom_hline(yintercept=median_hwy) +
geom_label(aes(x=-Inf, y=median_hwy), label=median_hwy)
Justification horizontale et verticale (hjust, vjust)
Malheureusement, une partie de l'étiquette s'est retrouvée en dehors du graphique, comme le montre la figure ci-dessus. Heureusement, la plupart des geom() disposent aussi des arguments hjust et vjust, qui permettent de décaler un élément (par exemple un point de données ou une étiquette) horizontalement ou verticalement. Au début, il peut être un peu difficile de comprendre comment hjust et vjust décalent les éléments, mais l'aide-mémoire suivant facilite grandement les choses :

Il ressort de ce qui précède que hjust=0 et vjust=0.5 devraient décaler l'étiquette vers la droite sur l'axe des x. Essayons (ligne 17) :
## Calculer la moyenne de la consommation de carburant (hwy)
median_hwy <- median(mpg$hwy)
## Créer le graphique
ggplot() +
# Pour les voitures dont la consommation est supérieure ou égale à la médiane
geom_point(data = filter(mpg, hwy>=median_hwy),
aes(x = displ, y = hwy),
color="gold1",
size=2) +
# Pour les voitures dont la consommation est inférieure à la médiane
geom_point(data = filter(mpg, hwy<median_hwy),
aes(x = displ, y = hwy),
color="cyan4",
size=2) +
geom_hline(yintercept=median_hwy) +
geom_label(aes(x=-Inf, y=median_hwy), label=median_hwy, hjust=0, vjust=0.5)
Nous modifions maintenant le code pour que le mappage esthétique (aes()) se fasse dans ggplot(). mpg contient la colonne class, qui indique le type de voiture. Nous voulons utiliser class pour colorer les points de données. Pour cela, nous indiquons color=class dans aes(). L'objectif est d'examiner s'il existe une association entre la catégorie à laquelle appartient la voiture et la consommation de carburant (mwy).
ggplot(data=mpg, aes(x = displ,
y = hwy,
color=class)) +
geom_point()
## Vous pouvez écrire « color » ou « colour », les deux variantes sont acceptées
Le mappage esthétique dans aes() s'applique donc à tous les points de données. Dans l'exemple ci-dessus, nous avons indiqué que les points de données devaient recevoir une couleur propre à chaque niveau de la colonne class. La signification des couleurs est indiquée à droite de la figure. Notez que la légende de droite porte le titre « class », qui est la colonne spécifiée dans color.
Nous continuons à modifier le graphique en y ajoutant des informations supplémentaires. Nous souhaitons maintenant que la taille de chaque point de données soit fonction du nombre de cylindres du moteur. Nous associons alors la variable cyl au paramètre size dans aes() :
ggplot(data=mpg, aes(x = displ,
y = hwy,
color=class,
size=cyl)) +
geom_point()
Il semble exister une forte association entre le nombre de cylindres et la taille du moteur (displ) ainsi que la consommation de carburant (hwy). Les voitures à faible consommation ont un petit moteur (displ) et moins de cylindres (cyl). Notez également qu'une échelle de tailles figure à droite du graphique et qu'elle porte le titre cyl, la variable que nous avons associée à size dans aes(). Dans ce cas, associer cyl à size convient parfaitement, car cyl est une variable numérique ordonnable.
Shape (forme) et alpha (transparence, transparency)
Dans aes(), on peut également spécifier alpha, qui contrôle la transparence des points, et shape, qui contrôle leur forme. Vous pouvez indiquer une valeur précise pour alpha (par exemple alpha=0.5 pour une transparence de 50 %) et pour shape (par exemple shape=2 pour utiliser des triangles au lieu de points). Vous pouvez aussi associer une colonne à alpha et à shape, auquel cas ggplot() effectue le mappage automatiquement. Essayons maintenant d'associer cyl à alpha :
ggplot(data=mpg, aes(x = displ,
y = hwy,
color=class,
size=cyl,
alpha=cyl)) +
geom_point()
Notez ci-dessus que cyl sert désormais à définir à la fois la taille et la transparence des points, ce qui apparaît également dans la légende à droite du graphique. Essayons maintenant d'associer shape à cyl :
Essayons maintenant d'associer class à shape. Nous ajustons également la taille des points en indiquant size=3, comme suit :
ggplot(data=mpg, aes(x = displ,
y = hwy,
color=class,
shape=class)) +
geom_point(size=3)
Vous pouvez représenter tous les points avec une shape (forme) précise. Pour cela, on indique manuellement shape dans geom_point(). Il ne faut pas l'indiquer dans aes(), mais comme argument de geom_point(), comme dans l'exemple suivant où tous les points reçoivent shape=2, c'est-à-dire des triangles :
ggplot(data=mpg, aes(x = displ,
y = hwy,
color=class)) +
geom_point(size=3, shape=2)
Vous pouvez spécifier shape, color et size en associant ces propriétés à des variables de votre data frame, ou en indiquant des valeurs précises. Les règles suivantes s'appliquent à shape, color et size :
| Propriété | Fonction | Peut être spécifiée par une variable | Peut être spécifiée manuellement |
|---|---|---|---|
shape |
Modifie la forme de geom_point(). |
Oui. Attribue une forme distincte à chaque niveau (6 au maximum). Exemple : shape=class |
Oui. Exemple : shape=2 |
size |
Modifie la taille de geom_point(). Exprimée en millimètres (mm). |
Non. | Oui, avec une valeur numérique. |
color |
Modifie la couleur de geom_point(). |
Oui. Exemple : shape=class |
Oui, avec une chaîne de caractères ou un code HEX. Exemple de chaîne : color="blue" Exemple HEX : color="#33333" |
En ce qui concerne shape, l'aide-mémoire ci-dessous présente les formes et le numéro correspondant à chacune.
