Bienvenue
Un graphique linéaire représente une relation fonctionnelle entre deux variables continues. Une carte représente des données spatiales. Même si ces deux types de représentations semblent différents, ils sont fait de façon similaire. Dans ce module, vous allez apprendre à :
- Faire de nouveaux types de graphique avec
geom_step()
,geom_area()
,geom_path()
, etgeom_polygon()
- Eviter d’obtenir des graphiques en dents de scie avec le paramètre esthétique
group
- Trouver et représenter des données spatiales avec
geom_map()
- Transformer un système de coordonnées en une projection de carte avec
coord_map()
Ce module est adapté du livre R for Data Science d’Hadley Wickham et Garrett Grolemund, publié par O’Reilly Media, Inc., 2016, ISBN: 9781491910399. Vous pouvez obtenir le livre ici : shop.oreilly.com.
Ce module utilise les packages {ggplot2}, {maps}, {mapproj}, et {dplyr}, qui ont été chargés pour votre convenance.
Graphiques lineaires
Graphiques linéaires vs. Graphiques de dispersion
Comme les graphiques de dispersion (ou nuages de points), les graphiques linéaires représentent la relation entre deux variables continues. Cependant, contrairement aux nuages de points, les graphiques linéaires s’attendent à ce que les variables aient des relations fonctionnelles, avec chaque valeur de \(x\) associée à uniquement une valeur de \(y\).
Par exemple, dans le graphique ci-dessous, il n’y a qu’une valeur de unemploy
pour chaque valeur de date
.
geom_line()
Utilisez la fonction geom_line()
pour créer des graphiques linéaires. Comme geom_point()
, geom_line()
a besoin d’un x et d’un y.
Utilisez geom_line()
dans le bloc pour recréer le graphique ci-dessus. Le graphique utilise le jeu de données economics
qui est dans {ggplot2}. Représentez la variable date
sur l’axe des \(x\) et unemploy
sur l’axe des \(y\). Allez voir le module Bases de la visualisation de données si vous êtes complètement bloqués.
ggplot(economics) +
aes(x = date, y = unemploy) +
geom_line()
asia
Nous avons utilisé le package {gapminder} pour créer un nouveau jeu de données nommé asia
à représenter graphiquement. asia
contient entre autres le PIB par habitant (GDP per capita en anglais) de quatre pays entre 1952 et 2007.
asia
Phénomène de dents de scie
Cependant, lorsqu’on représente le jeu de données asia
, le graphique semble bizarre. La ligne monte et descend en dents de scie (on parle de whipsawing en anglais). Les graphiques en dents de scie sont un des défis fréquents lorsqu’on réalise des graphiques linéaires.
ggplot(asia) +
aes(x = year, y = gdpPercap) +
geom_line()
Quiz - Phénomène de dents de scie
Lignes multiples
Recréez le graphique en utilisant un nuage de points. Voyez-vous plus d’une “ligne” dans les données ?
ggplot(data = asia) +
aes(x = year, y = gdpPercap) +
geom_point()
group
De nombreuses fonctions géométriques geom
comme lines, boxplots, et smooth lines, utilisent un objet unique pour le jeu de données entier. Vous pouvez utiliser le paramètre esthétique group pour indiquer à ces fonctions geom
de représenter différents objets pour différents groupes d’observations.
Par exemple, dans le code ci-dessous, vous pouvez associer group
à la variable de regroupement country
pour créer une ligne distincte pour chaque pays. Essayez. Assurez-vous de placer le groupe dans la fonction aes
.
ggplot(data = asia) +
aes(x = year, y = gdpPercap)
geom_line()
ggplot(data = asia) +
aes(x = year, y = gdpPercap, group = country) +
geom_line()
Paramètres esthétiques
Vous n’avez pas besoin de vous fier au paramètre esthétique group
pour effectuer un regroupement. {ggplot2} regroupera automatiquement un geom
chaque fois que vous ferez correspondre un paramètre esthétique à une variable catégorielle.
Ainsi, par exemple, le code ci-dessous effectue un regroupement implicite. Et comme nous utilisons le paramètre esthétique color
, le tracé comprend la légende des couleurs.
ggplot(data = asia) +
aes(x = year, y = gdpPercap, color = country) +
geom_line()
linetype
Les lignes reconnaissent un paramètre esthétique que nous n’avons jamais rencontré auparavant : linetype. Changez le paramètre esthétique color
par le paramètre linetype
ci-dessous et examinez les résultats. Que se passe-t-il si vous associez à la fois une couleur et un type de ligne à un pays ?
ggplot(data = asia) +
aes(x = year, y = gdpPercap, color = country) +
geom_line()

ggplot(data = asia) +
aes(x = year, y = gdpPercap, linetype = country, color = country) +
geom_line()
Exercice 1 - Espérance de vie
Utilisez ce que vous avez appris pour tracer l’espérance de vie de chaque pays au fil du temps. L’espérance de vie est enregistrée dans le jeu de données asia
dans la variable lifeExp
. Quel pays a l’espérance de vie la plus élevée ? La plus faible ?
ggplot(data = asia) +
aes(x = year, y = lifeExp, color = country, linetype = country) +
geom_line()
Fonctions geometriques similaires
geom_step()
geom_step()
produit un graphique linéaire de manière progressive. Pour voir ce que nous voulons dire, changez la fonction geom
dans le graphique ci-dessous et relancez le code.
ggplot(data = asia) +
aes(x = year, y = lifeExp, color = country, linetype = country) +
geom_line()

ggplot(data = asia) +
aes(x = year, y = lifeExp, color = country, linetype = country) +
geom_step()
geom_area()
geom_area()
est similaire à un graphique linéaire, mais il remplit la zone sous la ligne. Pour voir geom_area()
en action, changez la fonction geom
dans le graphique ci-dessous et relancez le code.
ggplot(data = economics) +
aes(x = date, y = unemploy) +
geom_line()

ggplot(data = economics) +
aes(x = date, y = unemploy) +
geom_area()
Révision - Paramètres esthétiques à l’intérieur ou à l’extérieur de la fonction aes
Vous souvenez-vous du module Bases de la visualisation de données ? Comment feriez-vous pour mettre le remplissage de notre graphique en bleu (au lieu, par exemple, de faire correspondre le remplissage à une variable) ? Essayez.
ggplot(data = economics) +
aes(x = date, y = unemploy) +
geom_area()

ggplot(data = economics) +
aes(x = date, y = unemploy) +
geom_area(fill = "blue")
Accumulation
geom_area()
est un excellent choix si vos mesures représentent l’accumulation d’objets (comme les personnes sans emploi). Notez que l’axe \(y\) avec geom_area()
commence ou se termine toujours à zéro.
C’est peut-être pour cette raison que geom_area()
peut donner des résultats étranges lorsque vous avez plusieurs groupes. Exécutez le code ci-dessous. Pouvez-vous dire ce qui se passe ici ?
ggplot(data = asia) +
aes(x = year, y = lifeExp, fill = country) +
geom_area()
Quiz - Ajustement de position
Si vous avez répondu que les Chinois vivaient jusqu’à 300 ans, vous avez mal deviné.
geom_area()
empile les groupes les uns au-dessus des autres. Par conséquent, la ligne qui devrait afficher l’espérance de vie pour la Chine affiche l’espérance de vie combinée pour tous les pays.
Vous pouvez corriger cela en modifiant l’ajustement de position de la fonction geom_area()
. Essayez ci-dessous. Changez le paramètre de position de "stack"
(la valeur par défaut) à "identity"
. Allez voir le module Diagramme à barres si vous voulez en savoir plus sur les ajustements de position.
ggplot(data = asia) +
aes(x = year, y = lifeExp, fill = country) +
geom_area(position = "stack", alpha = 0.3)
ggplot(data = asia) +
aes(x = year, y = lifeExp, fill = country) +
geom_area(position = "identity", alpha = 0.3)
geom_path()
geom_line()
a un drôle de collègue : geom_path()
. geom_path()
trace une ligne entre les points comme geom_line()
, mais au lieu de connecter les points dans l’ordre où ils apparaissent le long de l’axe \(x\), cette fonction connecte les points dans l’ordre où ils apparaissent dans le jeu de données.
Elle commence par l’observation de la première ligne du jeu de données et la relie à l’observation de la deuxième ligne, qu’elle relie ensuite à l’observation de la troisième ligne, et ainsi de suite.
Exemple geom_path()
Pour voir comment geom_path()
fait cela, réorganisons les lignes du jeu de données economics
. Nous pouvons les réarranger par valeur de la variable unemploy
. Ainsi, le jeu données commencera par l’observation qui avait la valeur la plus basse de unemploy
.
economics2 <- economics %>%
arrange(unemploy)
economics2
Si nous traçons les données réordonnées avec à la fois geom_line()
et geom_path()
nous obtenons deux graphiques très différents.
ggplot(data = economics2) +
aes(x = date, y = unemploy) +
geom_line()
ggplot(data = economics2) +
aes(x = date, y = unemploy) +
geom_path()
Le graphique de gauche utilise geom_line()
: les points sont reliés dans l’ordre le long de l’axe \(x\). Le graphique de droite utilise geom_path()
: les points sont connectés dans l’ordre où ils apparaissent dans le jeu de données (ce qui les met dans l’ordre le long de l’axe \(y\)).
Un exemple d’utilisation
Pourquoi voudriez-vous utiliser geom_path()
? Le code ci-dessous illustre un cas particulièrement utile. Le jeu de données tx
contient des coordonnées de latitude et de longitude sauvegardées dans un ordre spécifique.
tx
tx
Que pensez-vous qu’il se passe lorsque vous faites un graphique avec les données de tx
? Exécutez le code pour le savoir.
ggplot(tx) +
aes(x = long, y = lat) +
geom_path()
ggplot(tx) +
aes(x = long, y = lat) +
geom_path()
geom_polygon()
geom_polygon()
va plus loin que geom_path()
: il relie le dernier point au premier, et colore ensuite la région intérieure avec un remplissage. Le résultat est un polygone.
ggplot(tx) +
aes(x = long, y = lat) +
geom_polygon()
Exercice 2 - Phénomène de bris de verre
Selon vous, qu’est-ce qui a mal tourné dans le graphique du Texas ci-dessous ?
Cartes
{maps}
Le jeu de données tx
provient du package {maps}, qui est un package R contenant des jeux de données au format similaire pour de nombreuses régions du globe.
Une courte liste des jeux de données sauvegardés dans {maps} inclue : france
, italy
, nz
, usa
, world
, et world2
, ainsi que county
et state
. Pour en savoir plus sur {maps}, lancez help(package = maps)
.
map_data
Vous n’avez pas besoin d’accéder au package {maps} pour utiliser ses données. {ggplot2} fournit la fonction map_data()
qui récupère les cartes du package {maps} et les renvoie dans un format que {ggplot2} peut tracer.
Syntaxe de map_data
Pour utiliser map_data()
, donnez-lui le nom d’un jeu de données à récupérer. Vous pouvez récupérer un sous-ensemble de données en renseignant l’argument optionnel region
. Par exemple, nous pouvons utiliser ce code pour récupérer une carte de la Floride à partir de state
, qui est le jeu de données qui contient les 50 états américains.
fl <- map_data("state", region = "florida")
ggplot(data = fl) +
aes(x = long, y = lat) +
geom_polygon()
Modifiez le code pour récupérer et tracer un autre état, par exemple l’Idaho.
id <- map_data("state", region = "idaho")
ggplot(data = id) +
aes(x = long, y = lat) +
geom_polygon()
state
Si vous ne spécifiez pas de région, map_data()
récupérera l’ensemble des données, dans ce cas state
.
us <- map_data("state")
En pratique, vous devrez souvent récupérer un jeu de données entier au moins une fois pour savoir quels noms de régions il faut utiliser avec map_data()
. Les noms seront stockés dans la colonne region
de ce jeu de données.
Hmmm
Le code ci-dessous récupère et trace l’ensemble du jeu de données state, mais quelque chose ne va pas. Quoi ?
us <- map_data("state")
ggplot(data = us) +
aes(x = long, y = lat) +
geom_polygon()
Polygones multiples
Dans ce cas, notre jeu de données n’est pas désordonné, mais il contient plus d’un polygone : il contient 50 polygones - un pour chaque état.
Par défaut, geom_polygon()
essaie de tracer un seul polygone, ce qui l’amène à relier plusieurs polygones de façon étrange.
group
Quel paramètre pouvez-vous utiliser pour tracer des polygones multiples ? Dans le code ci-dessous, associez le paramètre esthétique group
à la variable group
du jeu de données state
. Cette variable contient toutes les informations de regroupement nécessaires pour réaliser une carte cohérente. Relancez ensuite le code.
ggplot(data = us) +
aes(x = long, y = lat) +
geom_polygon()

ggplot(data = us) +
aes(x = long, y = lat, group = group) +
geom_polygon()
USArrests
R est fourni avec un jeu de données appelé USArrests
que nous pouvons utiliser en conjonction avec notre graphique ci-dessus pour faire une carte choroplèthe. Une carte choroplèthe utilise la couleur de chaque région dans le graphique pour afficher une valeur associée à la région.
Dans notre cas, nous utiliserons la variable UrbanPop
de USAarrests
qui décrit le degré d’urbanisation de chaque état en 1973. UrbanPop
est le pourcentage de la population qui vivait à l’intérieur d’une ville.
USArrests
geom_map()
Vous pouvez utiliser geom_map()
pour créer des cartes choroplèthes. geom_map()
couple des données comme USArrests
avec une carte comme us
en faisant correspondre les noms de régions.
Les conflits de données
Pour utiliser geom_map()
, nous devons d’abord nous assurer qu’un ensemble commun de noms de régions apparaît dans les deux ensembles de données.
Pour l’instant, ce n’est pas le cas. USArrests
utilise des noms d’états en majuscules et les cache en dehors du jeu de données dans les noms de lignes (plutôt que dans une colonne). Au contraire, us
utilise une colonne de noms d’états en minuscules. Le code ci-dessous permet de résoudre ce problème.
USArrests2 <- USArrests %>%
rownames_to_column("region") %>%
mutate(region = tolower(region))
USArrests2
Syntaxe de geom_map()
Pour utiliser geom_map()
:
Initialisez un graphique avec le jeu de données qui contient vos données. Ici,
USArrests2
.Ajouter
geom_map()
. Définissez le paramètre esthétiquemap_id
à la variable qui contient les noms des régions. Puis définissez le paramètre esthétiquefill
à la variablefill
. Vous n’avez pas besoin de fournir les paramètres esthétiquesx
ety
,geom_map()
dérivera ces valeurs de la carte, que vous devez définir avec le paramètremap
. Puisquemap
est un paramètre, il doit aller en dehors de la fonctionaes()
.Après
geom_map()
, utilisezexpand_limits()
, et dites àexpand_limits()
quelles sont les variables \(x\) et \(y\) dans la carte. Cela ne devrait pas être nécessaire dans les futures versions degeom_map()
, mais pour l’instant {ggplot2} utilisera les argumentsx
ety
deexpand_limits()
pour construire la boîte de délimitation de votre graphique.
ggplot(data = USArrests2) +
aes(map_id = region, fill = UrbanPop) +
geom_map(map = us) +
expand_limits(x = us$long, y = us$lat)
coord_map()
Vous avez peut-être remarqué que nos cartes ont l’air un peu fausses. Jusqu’à présent, nous les avons tracées en coordonnées cartésiennes, ce qui déforme la surface sphérique décrite par la latitude et la longitude. De plus, {ggplot2} ajuste le rapport d’aspect de nos graphiques pour qu’ils correspondent à notre fenêtre graphique, ce qui peut encore fausser nos cartes.
Vous pouvez éviter ces deux distorsions en ajoutant coord_map()
à votre graphique. La fonction coord_map()
affiche le graphique dans une projection cartographique fixe. Notez que coord_map()
, repose sur le package {mapproj} . Vous devrez donc avoir installé {mapproj} avant d’utiliser coord_map()
.
ggplot(data = USArrests2) +
aes(map_id = region, fill = UrbanPop) +
geom_map(map = us) +
expand_limits(x = us$long, y = us$lat) +
coord_map()
Projections
Par défaut, coord_map()
remplace le système de coordonnées par une projection Mercator. Pour utiliser une projection différente, mettez l’argument projection
de coord_map()
à un nom de projection, entouré de guillemets.
Pour voir cela, étendez le code ci-dessous pour afficher la carte dans une projection “sinusoïdale”.
ggplot(data = USArrests2) +
aes(map_id = region, fill = UrbanPop) +
geom_map(map = us) +
expand_limits(x = us$long, y = us$lat)

ggplot(data = USArrests2) +
aes(map_id = region, fill = UrbanPop) +
geom_map(map = us) +
expand_limits(x = us$long, y = us$lat) +
coord_map(projection = "sinusoidal")
Récapitulatif
Vous pouvez maintenant réaliser tous les graphiques recommandés dans le module Analyse exploratoire de données. Le prochain module vous apprendra plusieurs stratégies pour faire face à la problématique de chevauchement (superposition), une problématique qui peut survenir lorsque vous avez de grands jeux de données ou des données à faible résolution.