
Les 50 meilleures visualisations avec ggplot2 : Guide technique complet avec code R
ggplot2 est un pilier incontournable pour tout professionnel travaillant avec R. Ce guide est conçu pour ceux qui veulent produire des visualisations sophistiquées, claires et percutantes en exploitant tout le potentiel de ggplot2. Chaque exemple est accompagné de code et enrichi d’astuces techniques pour les rendre encore plus puissants.


Introduction : Maîtriser ggplot2 pour des visualisations exceptionnelles
ggplot2 repose sur The Grammar of Graphics, une approche qui structure les visualisations en combinant plusieurs couches (layers). Avec ggplot2, vous ne créez pas de simples graphiques : vous construisez une représentation visuelle complète de vos données.
Avant de plonger dans les exemples, voici quelques points clés à garder en tête :
- Structure des données : Vos données doivent être dans un format propre, généralement tidy. Utilisez les packages comme
dplyr
outidyr
pour préparer vos données. - Esthétique (aes) : L’argument
aes
permet de mapper vos données à des éléments visuels (axes, couleurs, tailles, formes). - Personnalisation : Chaque graphique peut être affiné à un niveau professionnel grâce aux thèmes et aux options avancées.
1. Explorer les relations : La puissance des scatterplots
Pour la partie pratique, vous aurez besoin d’installer et de charger des librairies (packages) dans R. Voici le code à utiliser pour cela. Il vous suffit d’ajouter les noms des packages nécessaires dans le vecteur mes_packages
:
# Fonction pour installer et charger les packages
installer_et_charger <- function(packages) {
# Parcourt la liste des packages
for (pkg in packages) {
# Vérifie si le package est déjà installé
if (!require(pkg, character.only = TRUE)) {
# Installe le package s'il n'est pas présent
install.packages(pkg, dependencies = TRUE)
# Charge le package après installation
library(pkg, character.only = TRUE)
} else {
# Charge le package directement s'il est déjà installé
library(pkg, character.only = TRUE)
}
}
}
# Liste des packages à installer/charger
mes_packages <- c("dplyr", "ggplot2", "tidyr", "readr", "stringr")
# Appel de la fonction
installer_et_charger(mes_packages)
Nuage de points (Scatterplot)
Un nuage de points est idéal pour observer les relations entre deux variables continues (exemple Surface Vs Population).
# Désactiver la notation scientifique pour une meilleure lisibilité
options(scipen = 999)
# Utilisation d'un thème minimaliste et lisible
theme_set(theme_bw())
# Charger les données
data("midwest", package = "ggplot2")
# Création du nuage de points : scatterplot
gg <- ggplot(midwest, aes(x = area, y = poptotal)) +
geom_point(aes(col = state, size = popdensity), alpha = 0.6) + # Points colorés et dimensionnés
geom_smooth(method = "loess", se = FALSE, color = "blue", linetype = "dashed") + # Courbe LOESS
xlim(c(0, 0.1)) + # Limiter les axes
ylim(c(0, 500000)) +
labs(
subtitle = "Surface vs Population",
y = "Population totale",
x = "Surface",
title = "Nuage de points avec ggplot2",
caption = "Source: midwest"
)
# Affichage du graphique
plot(gg)

Astuces Pro pour ce Scatterplot :
- Accentuez la transparence des points : Ajoutez
alpha = 0.7
dansgeom_point()
pour réduire le chevauchement et mieux visualiser les zones denses. - Personnalisez les tailles des points : Utilisez
scale_size(range = c(2, 10), name = "Densité de population")
pour ajuster les tailles et rendre la légende plus informative. - Ajoutez des annotations dynamiques : Utilisez
geom_text()
ouggrepel
pour étiqueter automatiquement les états avec des valeurs remarquables, comme les populations les plus élevées. - Mettez en évidence certaines tendances : Ajoutez une courbe de régression linéaire en complément de LOESS avec
geom_smooth(method = "lm", se = FALSE, color = "red", linetype = "dotted")
. - Adaptez la palette de couleurs : Utilisez
scale_color_viridis_d()
pour une meilleure différenciation des états et une esthétique plus moderne. - Améliorez la lisibilité des axes : Ajoutez
scale_x_continuous(labels = scales::percent)
pour exprimer la surface en pourcentage ou formatez les grandes valeurs sur l’axe Y avecscales::comma
. - Exportez avec qualité : Sauvegardez avec
ggsave("scatterplot_midwest.png", dpi = 300, width = 8, height = 6)
pour un rendu adapté aux publications ou présentations.
Scatterplot avec Encerclement : Mettre en avant des cas spécifiques
Ce graphique enrichit un scatterplot standard en ajoutant un encerclement pour mettre en évidence un groupe spécifique de points. Cela peut être utile pour attirer l’attention sur des cas particuliers ou des anomalies dans les données.
Dans cet exemple, nous utilisons la fonction geom_encircle()
du package ggalt pour entourer les points répondant à des critères précis de population et de surface. Cela permet de guider visuellement l’utilisateur vers des zones d’intérêt.
# Désactiver la notation scientifique
options(scipen = 999)
# Sélection des points d'intérêt
midwest_select <- midwest[midwest$poptotal > 350000 &
midwest$poptotal <= 500000 &
midwest$area > 0.01 &
midwest$area < 0.1, ]
# Création du graphique
ggplot(midwest, aes(x = area, y = poptotal)) +
geom_point(aes(col = state, size = popdensity)) + # Points colorés
geom_smooth(method = "loess", se = FALSE) + # Courbe de tendance LOESS
xlim(c(0, 0.1)) +
ylim(c(0, 500000)) +
geom_encircle(aes(x = area, y = poptotal), # Encerclement
data = midwest_select,
color = "orange",
size = 2,
expand = 0.08) +
labs(subtitle = "Surface vs Population",
y = "Population totale",
x = "Surface",
title = "Scatterplot avec encerclement",
caption = "Source : midwest")

Astuces Pro pour ce Scatterplot avec Encerclement
- Optimisez l’expansion de l’encerclement : L’argument
expand = 0.08
ajoute une marge autour des points. Ajustez cette valeur pour éviter que l’encerclement ne soit trop serré ou trop éloigné. - Sélection dynamique des points : Automatiser la sélection avec des filtres plus complexes en utilisant
dplyr
pour rendre le code adaptable à d’autres datasets. - Affinez l’encerclement : La couleur (
color = "orange"
) et la taille (size = 2
) peuvent être adaptées pour correspondre à l’esthétique générale du graphique. - Ajoutez une légende explicative : Précisez dans la légende ou le texte accompagnant pourquoi ces points sont entourés pour aider à interpréter le graphique.
- Combinez avec des annotations : Pour rendre le graphique encore plus informatif, ajoutez des labels avec
geom_text()
ougeom_label()
sur les points clés de l’encerclement. - Exportez le graphique : Comme pour le premier scatterplot, sauvegardez avec
ggsave()
pour garantir une qualité professionnelle.
Jitter Plot : Révéler les points cachés
Le scatterplot classique est un excellent outil pour visualiser les relations entre deux variables continues, mais il peut masquer des informations importantes lorsque plusieurs points se superposent. Dans ce cas, un Jitter Plot permet de révéler ces points en les dispersant légèrement autour de leur position d’origine.
Dans cet exemple, nous utilisons deux graphiques :
- Un jitter plot pour résoudre le problème des points superposés et visualiser la densité réelle.
- Un scatterplot classique pour observer la relation initiale.
# Charger les packages et les données
library(ggplot2)
data(mpg, package = "ggplot2") # Charger le dataset mpg
# Définir un thème global
theme_set(theme_bw())
# Création du graphique
g <- ggplot(mpg, aes(cty, hwy)) # Variables : cty (ville) et hwy (autoroute)
# Scatterplot classique
g + geom_point() +
geom_smooth(method = "lm", se = FALSE) + # Courbe de régression linéaire
labs(
subtitle = "mpg : Kilométrage Ville vs Autoroute",
y = "Kilométrage Autoroute (hwy)",
x = "Kilométrage Ville (cty)",
title = "Scatterplot avec superposition des points",
caption = "Source : mpg"
)

# Création du graphique avec dispersion
g + geom_jitter(width = 0.5, size = 1, col= 'orange') +
labs(
subtitle = "mpg : Kilométrage Ville vs Autoroute",
y = "Kilométrage Autoroute (hwy)",
x = "Kilométrage Ville (cty)",
title = "Jitter Plot : Révélation des points cachés",
caption = "Source : mpg"
)

Astuces Pro
- Identifiez les limites du scatterplot classique : Le scatterplot initial masque les points superposés, un problème courant lorsque les variables sont discrètes ou fortement corrélées.
- Ajoutez une courbe de tendance : La courbe de régression (
geom_smooth(method = "lm")
) dans le scatterplot classique donne un aperçu global de la relation entre les variables. - Réglez la largeur du jitter : Dans le jitter plot, l’argument
width = 0.5
est essentiel pour révéler les points superposés. Ajustez cette valeur selon la densité des données. - Choisissez une taille de point optimale : La taille des points (
size = 1
) doit être suffisamment petite pour éviter de masquer d’autres points dans les zones denses. - Combinez avec la transparence : Ajoutez
alpha = 0.7
dansgeom_jitter()
pour réduire le chevauchement visuel dans les zones très denses. - Simplifiez les axes : Utilisez des étiquettes d’axe adaptées comme
scale_x_continuous()
ouscale_y_continuous(labels = scales::comma)
pour formater les valeurs. - Ajoutez une légende claire : Si vous utilisez des esthétiques supplémentaires (comme des couleurs ou des tailles), assurez-vous que la légende explique leur signification.