library(ggplot2)
p <- ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
labs(x = "Dose (mg/day)", y = "Tooth length")
# the house default: airy, modern, light gridlines
p + theme_minimal()
Changez de thème, supprimez le fond gris et définissez les couleurs du panneau — en direct dans votre navigateur
Apprenez à restyler un graphique ggplot2 dans R — passez à un thème intégré (theme_minimal, theme_bw, theme_classic), supprimez le fond gris par défaut, modifiez la couleur du fond du panneau et du graphique ainsi que les lignes de grille, mettez tout le texte à l’échelle avec base_size, définissez un thème pour toute la session et créez le vôtre. Modifiez et exécutez le code en direct, sans installation.
20 juin 2026
7 juillet 2026
theme_minimal(), theme_bw(), theme_classic(), theme_void(), et bien d’autres.theme_gray() ; passez à theme_bw()/theme_classic() (ou videz le panneau) pour un fond blanc.theme(...) et les quatre fonctions d’aide : element_rect() (fonds), element_line() (grilles/graduations), element_text() (étiquettes), element_blank() (suppression).base_size, p. ex. theme_minimal(base_size = 16).theme_set(), ou créez le vôtre en étendant un thème de base avec %+replace%.Un thème ggplot2 est la couche de style de votre graphique : il définit la couleur de fond, les lignes de grille, les polices, les graduations des axes et l’apparence de la légende — tout ce qui n’est pas les données elles-mêmes. La recherche la plus courante qui mène ici est « comment se débarrasser du fond gris ? », et la réponse est presque toujours un thème. Dans R, ggplot2 propose une galerie de thèmes prêts à l’emploi que vous appliquez en une seule couche, ainsi qu’une fonction theme() pour redéfinir n’importe quel élément individuel. Cette leçon parcourt les deux ; les figures sont rendues ici même, et vous pouvez réexécuter ou modifier chacune d’elles en direct.
Nous utilisons le jeu de données intégré ToothGrowth : la longueur des cellules odontoblastes (len) chez des cobayes ayant reçu de la vitamine C à trois doses (dose : 0.5, 1 ou 2 mg/jour) par deux méthodes d’administration (supp : jus d’orange OJ ou acide ascorbique VC). Une boîte à moustaches groupée nous donne beaucoup d’habillage — panneau, grille, légende, texte — à restyler.
Le moyen le plus rapide de changer l’apparence d’un graphique est d’ajouter un thème complet en couche. ggplot2 en propose plusieurs : theme_gray() (celui par défaut), theme_bw(), theme_linedraw(), theme_light(), theme_minimal(), theme_classic(), theme_void(), et theme_dark(). Voici le même graphique sous quatre d’entre eux pour que vous puissiez comparer d’un coup d’œil.

Remplacez theme_minimal() par theme_bw() pour obtenir un panneau blanc net avec une bordure fine, ou theme_classic() pour une apparence épurée avec uniquement les deux lignes d’axes :

Pour des thèmes tiers plus riches et finement réglés (Tufte, Economist, WSJ, Stata), le paquet ggthemes ajoute une famille theme_*() sur le même modèle. Nous limitons le code pédagogique à l’ensemble intégré — theme_minimal() est le thème maison par défaut de Datanovia — mais les mécanismes ci-dessous s’appliquent à n’importe quel thème.
De loin la demande la plus courante : le panneau par défaut de theme_gray() est gris, et vous le voulez blanc. Vous avez trois options propres. La plus simple est de passer à un thème déjà blanc — theme_bw() ou theme_classic(). La plus chirurgicale est de garder votre thème actuel et de vider uniquement le fond du panneau avec element_blank().

element_blank() est l’outil universel « supprimer cet élément » — il fonctionne sur n’importe quel composant de thème, pas seulement les fonds.
Le panneau est le rectangle situé directement derrière vos données. Définissez sa couleur avec panel.background = element_rect(fill = ..., colour = ...), et stylez les lignes de grille avec panel.grid.major / panel.grid.minor = element_line(...). element_rect() contrôle les remplissages et bordures rectangulaires ; element_line() contrôle les lignes.
library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
labs(x = "Dose (mg/day)", y = "Tooth length") +
theme(
panel.background = element_rect(fill = "#eaf2fb", colour = "grey70"),
panel.grid.major = element_line(colour = "white", linewidth = 0.6),
panel.grid.minor = element_line(colour = "white", linewidth = 0.3)
)
Le fond du graphique est l’image entière, y compris les marges autour du panneau — distinct du panneau lui-même. Définissez-le avec plot.background = element_rect(fill = ...). Colorez les deux séparément pour bien voir la différence.
Pour épurer un graphique, videz les lignes de grille et la bordure du panneau avec element_blank(), puis rajoutez les deux lignes d’axes avec axis.line = element_line(...) — c’est essentiellement ainsi qu’est construit theme_classic().
library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
labs(x = "Dose (mg/day)", y = "Tooth length") +
theme_minimal() +
theme(
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
axis.line = element_line(colour = "black")
)
Chaque redéfinition à l’intérieur de theme() est construite à partir de l’une des quatre fonctions d’aide — apprenez-les et vous pourrez tout styler :
element_rect() — rectangles : fonds, bordures, clés de légende (fill, colour, linewidth).element_line() — lignes : lignes de grille, lignes d’axes, graduations (colour, linewidth, linetype).element_text() — texte : titres, étiquettes d’axes, texte de légende (colour, size, face, angle).element_blank() — supprime entièrement l’élément.Voici les quatre réunies dans un seul appel à theme() :
library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
labs(x = "Dose (mg/day)", y = "Tooth length") +
theme(
panel.background = element_rect(fill = "#f7f9fc", colour = "grey80"), # rect
panel.grid.major = element_line(colour = "#cdd9ea"), # line
axis.title = element_text(face = "bold", colour = "#1f3a5f"), # text
panel.grid.minor = element_blank() # blank
)
Chaque thème intégré accepte un argument base_size qui met tout le texte à l’échelle — titres, étiquettes d’axes, étiquettes de graduations, légende — proportionnellement. Augmentez-le pour des diapositives ou l’impression, réduisez-le pour des tableaux de bord denses. Associez-le à base_family pour définir la police.
Plutôt que d’ajouter un thème à chaque graphique, définissez un thème par défaut une fois avec theme_set(). Chaque graphique suivant l’utilise jusqu’à ce que vous le rétablissiez. Sauvegardez d’abord l’ancien thème pour pouvoir le restaurer.

Une fois que vous avez trouvé une apparence qui vous plaît, enveloppez-la dans une fonction pour pouvoir la réutiliser partout. Partez d’un thème de base et redéfinissez quelques éléments avec %+replace%, qui remplace proprement des éléments entiers. C’est le modèle derrière un thème maison comme le futur theme_datanovia().
library(ggplot2)
theme_house <- function(base_size = 12) {
theme_minimal(base_size = base_size) %+replace%
theme(
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank(),
axis.title = element_text(face = "bold", colour = "#3a86d4"),
plot.background = element_rect(fill = "white", colour = NA)
)
}
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
labs(x = "Dose (mg/day)", y = "Tooth length") +
theme_house()
Pour enregistrer un graphique sans fond — pour des diapositives ou des superpositions — videz les rectangles du panneau, du graphique et de la légende en les passant à "transparent" (ou utilisez theme_void() pour aucun habillage du tout), puis indiquez à ggsave() de conserver la transparence avec bg = "transparent".
library(ggplot2)
p <- ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
labs(x = "Dose (mg/day)", y = "Tooth length") +
theme_minimal() +
theme(
panel.background = element_rect(fill = "transparent", colour = NA),
plot.background = element_rect(fill = "transparent", colour = NA),
legend.background = element_rect(fill = "transparent", colour = NA)
)
p
Pour contrôler les dimensions et la résolution de l’image enregistrée, consultez le guide d’enregistrement des graphiques.
Pour une apparence de tableau de bord sombre, construisez à la main un fond noir pour le panneau et le graphique, puis passez le texte et la grille à une couleur claire pour qu’ils restent lisibles. theme_dark() donne un point de départ gris foncé ; celui-ci va jusqu’au noir complet.
library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
geom_boxplot(fill = "#3a86d4", colour = "white", alpha = 0.85) +
labs(x = "Dose (mg/day)", y = "Tooth length") +
theme(
plot.background = element_rect(fill = "black", colour = NA),
panel.background = element_rect(fill = "black", colour = NA),
panel.grid.major = element_line(colour = "grey25"),
panel.grid.minor = element_blank(),
axis.text = element_text(colour = "white"),
axis.title = element_text(colour = "white")
)
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).
Vous travaillez en Python ? Un guide de stylisation et de feuilles de style matplotlib arrive dans la série Python.
Demandez à Prova « réécris mon appel theme() pour que le graphique ait un fond blanc et aucune ligne de grille » — elle répond avec du code que vous pouvez exécuter, de sorte que le style est reproductible. The runtime is the judge. Ask Prova →
Le panneau gris vient du theme_gray() par défaut. Passez à un thème déjà blanc — ajoutez theme_bw() ou theme_classic() en couche — ou gardez votre thème et videz uniquement le panneau avec theme(panel.background = element_blank()).
Le panneau est le rectangle situé directement derrière vos données, défini avec panel.background ; le fond du graphique remplit toute l’image, y compris les marges autour du panneau, défini avec plot.background. Ils se stylent séparément, donc colorer l’un n’affecte pas l’autre.
Chaque thème intégré accepte un argument base_size qui met tout le texte à l’échelle proportionnellement — titres, étiquettes d’axes, étiquettes de graduations et légende — d’un seul coup, p. ex. theme_minimal(base_size = 18). Associez-le à base_family pour définir aussi la police.
Appelez theme_set() une fois, p. ex. theme_set(theme_bw()), et chaque graphique suivant l’utilise sans couche de thème par graphique. Sauvegardez d’abord le thème actuel avec old <- theme_set(...) pour pouvoir le restaurer plus tard avec theme_set(old).
Passez les rectangles du panneau, du graphique et de la légende à "transparent" avec element_rect(fill = "transparent", colour = NA) à l’intérieur de theme(), puis conservez la transparence sur le disque en passant bg = "transparent" à ggsave(). Pour aucun habillage du tout, partez de theme_void().
Complétez le code pour que le graphique ait un fond blanc propre au lieu du panneau gris par défaut.
Vous avez restylé un graphique ggplot2 en changeant de thèmes intégrés, supprimé le fond gris par défaut pour un fond blanc propre, défini les couleurs de fond du panneau et du graphique ainsi que les lignes de grille, utilisé les quatre fonctions d’aide element_*(), mis tout le texte à l’échelle avec base_size, défini un thème par défaut à l’échelle de la session avec theme_set(), et enveloppé votre propre apparence dans un thème personnalisé réutilisable. La stylisation des couleurs des données (palettes, scale_fill_*) se trouve dans le guide des couleurs, et le placement et le style de la légende dans le guide de la légende. Ensuite, appliquez ces thèmes au reste de la grammaire de ggplot2.
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 = {Thèmes ggplot2 dans R : personnaliser l’apparence},
date = {2026-06-20},
url = {https://www.datanovia.com/learn/data-visualization/ggplot2/themes},
langid = {fr}
}