library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point()
Un seul parcours qui fait passer un graphique du strict minimum par défaut au prêt à publier
Faites passer un graphique ggplot2 du strict minimum par défaut au prêt à publier dans R, en un seul flux — ajoutez un titre et des titres d’axe, définissez les limites et les graduations des axes, changez les couleurs, repositionnez la légende et changez de thème. Chaque étape renvoie à la leçon dédiée pour aller plus loin.
17 juillet 2026
17 juillet 2026
labs(), un scale_*(), un theme(), puis vous changez de thème — chacun affine le même graphique.labs() définit le titre, le sous-titre, les titres des axes, la légende de figure et le titre de la légende en un seul appel.scale_x_continuous() / scale_y_continuous() (limites, graduations) ou coord_cartesian() (zoom sans supprimer de données).colour et choisissez une échelle adaptée au daltonisme comme scale_color_viridis_d() ; déplacez ou masquez la légende avec theme(legend.position = ...).theme_minimal() ou theme_classic(), puis affinez avec theme().La plupart des questions sur ggplot2 se résument à une seule : comment donner la bonne apparence à ce graphique ? Le graphique par défaut répond à l’analyse, mais pas au public — fond gris, noms de colonnes bruts en guise de titres d’axe, aucun titre, une légende là où ggplot2 le décide. La personnalisation corrige tout cela, et elle se fait par couches : vous ajoutez sans cesse de petits éléments (labs(), une échelle, un thème) au même graphique jusqu’à ce qu’il soit prêt à publier.
C’est l’aboutissement de la série ggplot2. Au lieu de ré-enseigner chaque sujet en profondeur, nous prenons un seul graphique et le faisons passer du strict minimum par défaut au prêt à publier en un seul flux, en touchant à chaque couche de personnalisation une fois. À chaque étape, vous obtenez la recette rapide, et un lien vers la leçon dédiée lorsque vous voulez le traitement complet.
Nous utilisons le jeu de données intégré mtcars : le poids de la voiture (wt) en fonction des miles par gallon (mpg), coloré selon le nombre de cylindres (cyl).
Commencez par le minimum : associez wt et mpg, ajoutez des points. Cela fonctionne, mais ce n’est pas présentable.
Trois choses paraissent inachevées : le fond gris avec ses lignes de grille marquées, les titres des axes qui sont des noms de colonnes bruts (wt, mpg) au lieu de mots, et l’absence de titre indiquant au lecteur ce qu’il regarde. Nous corrigeons chacune à son tour.
labs() définit chaque étiquette de texte en un seul appel : title, subtitle, les titres d’axe x/y, et une caption pour la source des données.

Le graphique s’explique désormais de lui-même. Pour l’ensemble complet des options — styliser le titre, ajouter un tag, utiliser \n pour les sauts de ligne — consultez les leçons dédiées sur le titre, le sous-titre et la légende de figure et sur la modification des titres d’axe.
Les plages d’axe et les positions des graduations sont contrôlées par scale_x_continuous() et scale_y_continuous(). Définissez limits pour fixer la plage et breaks pour choisir les marques de graduation.

Une mise en garde : scale_y_continuous(limits = ...) supprime tout point hors de la plage avant le tracé, ce qui peut modifier une droite ajustée. Pour zoomer sans écarter de données, utilisez plutôt coord_cartesian(ylim = ...). Pour le traitement complet — échelles logarithmiques, inversion d’un axe, expansion — consultez les limites et échelles d’axe, et pour la stylisation des graduations, consultez les graduations d’axe.
Pour colorer les points par groupe, associez la variable de regroupement à colour à l’intérieur de aes(). Enveloppez le cyl numérique dans factor() pour que ggplot2 le traite comme des catégories discrètes, puis appliquez une échelle adaptée au daltonisme avec scale_color_viridis_d().

Pour un graphique à série unique sans regroupement, définissez plutôt une seule couleur fixe — geom_point(color = "#3a86d4"), l’azur de la marque Datanovia. La boîte à outils complète des palettes — couleurs manuelles, brewer, gradients pour les variables continues — se trouve dans la leçon sur les couleurs.
L’association de colour a créé une légende automatiquement. Déplacez-la avec theme(legend.position = ...) ("top", "bottom", "left", "right", ou "none" pour la supprimer), et définissez son titre via l’argument labs() correspondant (color = "Cylinders", déjà défini ci-dessus).

Pour supprimer entièrement la légende, utilisez legend.position = "none" ; pour un contrôle plus fin d’une légende parmi plusieurs, utilisez guides(). Consultez la leçon sur la légende pour l’ensemble complet des options.
Le gris par défaut est theme_grey(). Remplacez-le par theme_minimal() (fond blanc, lignes de grille légères) ou theme_classic() (lignes d’axe, sans grille), puis affinez les détails avec theme() — ici, un texte de titre plus grand et en gras.
library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
geom_point(size = 3) +
labs(title = "Heavier cars use more fuel", x = "Weight (1000 lbs)",
y = "Miles per gallon", color = "Cylinders") +
scale_color_viridis_d() +
theme_minimal() +
theme(plot.title = element_text(size = 14, face = "bold"))
L’ordre compte : un thème complet comme theme_minimal() réinitialise tout, il doit donc venir avant tout ajustement de theme() — sinon le thème écrase vos modifications. Le catalogue complet des thèmes intégrés et la manière de créer le vôtre se trouvent dans la leçon sur les thèmes.
Empilez maintenant chaque couche sur le même graphique : étiquettes, axes personnalisés, une échelle adaptée au daltonisme, une légende repositionnée et un thème épuré. C’est la récompense — comparez-le à l’étape 1.
library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
geom_point(size = 3, alpha = 0.9) +
labs(
title = "Heavier cars use more fuel",
subtitle = "Weight vs. fuel economy for 32 cars",
x = "Weight (1000 lbs)",
y = "Miles per gallon",
color = "Cylinders",
caption = "Source: 1974 Motor Trend, mtcars"
) +
scale_x_continuous(breaks = seq(1, 6, by = 1)) +
scale_y_continuous(limits = c(10, 35), breaks = seq(10, 35, by = 5)) +
scale_color_viridis_d() +
theme_minimal() +
theme(
legend.position = "top",
plot.title = element_text(size = 14, face = "bold"),
plot.caption = element_text(color = "grey40")
)
Mêmes données, mêmes trois lignes de code de tracé de base — mais chaque couche de personnalisation ajoutée tour à tour le fait passer d’un défaut brut à une figure que vous pourriez insérer directement dans un rapport.
Chaque besoin correspond à une fonction et à une leçon dédiée pour le traitement complet :
| Ce que vous voulez changer | Fonction(s) | Leçon dédiée |
|---|---|---|
| Titre, sous-titre, légende de figure | labs(title=, subtitle=, caption=) |
Titre, sous-titre et légende de figure |
| Titres des axes | labs(x=, y=) |
Titres d’axe |
| Plage d’axe et positions des graduations | scale_x_continuous(), coord_cartesian() |
Limites et échelles d’axe |
| Marques et texte des graduations | scale_*_continuous(breaks=, labels=), theme() |
Graduations d’axe |
| Couleurs des points / groupes | scale_color_*(), aes(color=) |
Couleurs |
| Position, titre, suppression de la légende | theme(legend.position=), labs(), guides() |
Légende |
| Apparence globale (fond, grille) | theme_minimal(), theme_classic(), theme() |
Thèmes |
| Découper en plusieurs panneaux | facet_wrap(), facet_grid() |
Facettes |
| Forme et taille des points | aes(shape=, size=), scale_shape_manual() |
Formes des points |
| Type et épaisseur de ligne | aes(linetype=), scale_linetype_manual() |
Types de ligne |
| Étiquettes de texte sur le graphique | geom_text(), annotate("text", …) |
Annotations de texte |
| Enregistrer ou exporter la figure | ggsave("plot.png", width=, height=, dpi=) |
Enregistrer avec ggsave |
Les graphiques ci-dessus ont été rendus au moment de la construction. Envie d’expérimenter ? Modifiez le code et appuyez sur Run — il s’exécute dans votre navigateur via webR (sans serveur, sans installation). Essayez de passer legend.position à "bottom", ou de remplacer theme_minimal() par theme_classic().
Vous travaillez en Python ? Un guide de stylisation matplotlib/seaborn arrive dans la série Python.
Demandez à Prova « comment déplacer la légende ggplot2 sous le graphique et agrandir le titre ? » — elle répond avec du code que vous pouvez exécuter, donc la correction est reproductible. The runtime is the judge. Demander à Prova →
La légende ne bouge pas. Si theme(legend.position = "top") semble sans effet, vérifiez l’ordre : un thème complet tel que theme_minimal() réinitialise la position de la légende, il doit donc venir avant votre ajustement de theme(). ... + theme(legend.position = "top") + theme_minimal() revient silencieusement au défaut ; inversez les deux.
Une seconde échelle de couleur est ignorée. Ajouter scale_color_viridis_d() alors que vous avez déjà défini geom_point(color = "red") (une couleur fixe, hors de aes()) signifie que l’échelle n’a rien sur quoi agir — les échelles n’affectent que les attributs esthétiques associés. Si, à la place, vous ajoutez deux échelles de couleur, ggplot2 conserve la dernière et avertit « Scale for colour is already present ». Associez la variable dans aes() et appliquez exactement une seule échelle.
Les couleurs sortent en gradient, pas en groupes distincts. Associer une colonne numérique (color = cyl) donne une barre de couleur continue au lieu d’une légende discrète. Enveloppez-la dans factor() (color = factor(cyl)) pour que ggplot2 traite les valeurs comme des catégories, et utilisez une échelle discrète comme scale_color_viridis_d() (le _d signifie discret).
La personnalisation se fait par couches : partez de ggplot(...) + geom_*(), puis ajoutez des éléments au même graphique — labs() pour les titres et les étiquettes, un scale_*() pour les couleurs et les axes, theme_minimal() (ou un autre thème) pour l’apparence globale, et theme() pour les ajustements fins. Chaque couche affine le graphique précédent au lieu de le remplacer.
Ajoutez un thème complet tel que theme_minimal() (fond blanc, grille légère) ou theme_classic() (lignes d’axe, sans grille). Pour un contrôle plus fin — couleur de fond, lignes de grille, taille du texte — ajoutez theme() après lui, par exemple theme_minimal() + theme(panel.background = element_rect(fill = "white")). Le thème complet doit venir en premier, sinon il réinitialise vos ajustements.
Utilisez theme(legend.position = ...) avec "top", "bottom", "left", "right", ou "none" pour la supprimer entièrement. Placez cet appel theme() après tout thème complet comme theme_minimal(), qui réinitialise la position.
Utilisez un seul appel labs() : labs(title = "My title", x = "X axis", y = "Y axis"). Il définit aussi subtitle, caption, et le titre de la légende (via le nom de l’attribut esthétique, par exemple color = "Group"). Les titres des axes prennent par défaut les noms des colonnes, donc labs() est généralement la première chose que vous ajoutez.
Pour une couleur unique, définissez-la à l’intérieur du geom, hors de aes() : geom_point(color = "#3a86d4"). Pour colorer par groupe, associez la variable — aes(color = factor(group)) — et ajoutez une échelle telle que scale_color_viridis_d() (adaptée au daltonisme) ou scale_color_manual(values = ...) pour des couleurs exactes.
Partez du nuage de points coloré ci-dessous. Ajoutez (1) un titre, (2) une échelle de couleur discrète adaptée au daltonisme, (3) un thème minimal épuré, et (4) la légende en bas.
library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
geom_point(size = 3) +
labs(title = "Heavier cars use more fuel", color = "Cylinders") +
scale_color_viridis_d() +
theme_minimal() +
theme(legend.position = "bottom")
Vous écrivez theme(legend.position = "none") + theme_minimal() et la légende s’affiche toujours. Pourquoi ?
Afficher la réponse
Parce que theme_minimal() vient après votre appel theme() et réinitialise la position de la légende à sa valeur par défaut. Les thèmes complets écrasent tout, ils doivent donc venir en premier : theme_minimal() + theme(legend.position = "none").
Vous avez fait passer un seul graphique du strict minimum par défaut au prêt à publier, en ajoutant chaque couche de personnalisation tour à tour : les étiquettes avec labs(), les axes avec scale_*_continuous(), les couleurs avec scale_color_viridis_d(), la légende avec theme(legend.position = ...), et l’apparence avec theme_minimal(). Le principe est toujours le même — continuez d’ajouter des couches au même graphique jusqu’à ce qu’il se lise comme vous le souhaitez. Utilisez l’aide-mémoire ci-dessus pour aller directement à la fonction dont vous avez besoin.
Vous préférez un livre ? GGPlot2 Essentials est disponible en PDF téléchargeable — toutes les leçons de cette série, hors ligne et à vous.
Prouvez que vous savez le faire. Maîtrisez toute la série ggplot2 — suivez votre parcours, construisez des projets et obtenez un certificat.
Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.
dès 15 $/mois facturé annuellement
✓ Vous êtes Pro — continuez. The runtime is the judge.
Prêt à passer à la vitesse supérieure ?
Recevez les nouvelles leçons R & Python par e-mail
Pratique, reproductible, sans spam. Désinscription à tout moment.
Double opt-in. Nous ne partageons jamais votre e-mail.
Cette leçon est reproductible : les figures sont exécutées au moment de la construction (si elles s’affichent, le code fonctionne), et le bac à sable et le quiz se réexécutent en direct dans votre navigateur. The runtime is the judge.
@online{2026,
author = {},
title = {Comment personnaliser un graphique ggplot2 dans R : titres,
axes, couleurs, légende et thème},
date = {2026-07-17},
url = {https://www.datanovia.com/learn/data-visualization/ggplot2/customization},
langid = {fr}
}