Thèmes ggplot2 dans R : personnaliser l’apparence

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.

Date de publication

20 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Un thème contrôle tous les éléments non liés aux données d’un graphique — fond, lignes de grille, texte, graduations, légende — en un seul endroit.
  • Changez toute l’apparence avec une seule couche : theme_minimal(), theme_bw(), theme_classic(), theme_void(), et bien d’autres.
  • Le panneau gris par défaut vient de theme_gray() ; passez à theme_bw()/theme_classic() (ou videz le panneau) pour un fond blanc.
  • Affinez n’importe quel élément avec theme(...) et les quatre fonctions d’aide : element_rect() (fonds), element_line() (grilles/graduations), element_text() (étiquettes), element_blank() (suppression).
  • Le fond du panneau se trouve derrière les données ; le fond du graphique remplit toute l’image — ils se définissent séparément.
  • Mettez toutes les étiquettes de texte à l’échelle d’un coup avec base_size, p. ex. theme_minimal(base_size = 16).
  • Définissez un thème pour toute la session avec theme_set(), ou créez le vôtre en étendant un thème de base avec %+replace%.
  • Chaque graphique ci-dessous est rendu pour vous — puis modifiez n’importe quel exemple en direct dans le bac à sable.
Obtenez le livre — GGPlot2 Essentials (PDF)

Introduction

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.

La galerie de thèmes intégrés

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.

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()

ggplot2 box plot of tooth length by dose under theme_minimal, with the airy gridlines and no panel border that make it the Datanovia house default.

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 :

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")

p + theme_classic()

ggplot2 box plot of tooth length by dose with theme_classic applied: a white background, no grid lines, and only the x and y axis lines.

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.

Supprimer le fond gris (obtenir un fond blanc)

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().

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_blank())

ggplot2 box plot of tooth length by dose with the default grey panel removed, leaving a clean white background behind the boxes.

element_blank() est l’outil universel « supprimer cet élément » — il fonctionne sur n’importe quel composant de thème, pas seulement les fonds.

Modifier la couleur de fond du panneau et les lignes de grille

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)
  )

ggplot2 box plot of tooth length by dose with a pale blue panel background and white major and minor grid lines.

Modifier la couleur de fond du graphique

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.

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(
    plot.background  = element_rect(fill = "#f0f0f0", colour = NA),
    panel.background = element_rect(fill = "white", colour = NA)
  )

ggplot2 box plot of tooth length by dose with a light grey plot background filling the margins and a white panel behind the boxes.

Supprimer la bordure du panneau et les lignes de grille

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")
  )

ggplot2 box plot of tooth length by dose with all grid lines and the panel border removed, leaving only the two black axis lines.

Les quatre fonctions d’aide pour les éléments de thème

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
  )

ggplot2 box plot of tooth length by dose styled with all four element helpers: a pale panel rectangle, navy grid lines, bold navy axis titles, and no minor grid.

Mettre tout le texte à l’échelle d’un coup avec base_size

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.

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(base_size = 18)

ggplot2 box plot of tooth length by dose with theme_minimal at base_size 18, so all axis and tick text is noticeably larger.

Définir un thème pour toute la session

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.

library(ggplot2)
old <- theme_set(theme_bw(base_size = 13))   # make theme_bw the default

# no theme layer needed now — it is the session default
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
  labs(x = "Dose (mg/day)", y = "Tooth length")

ggplot2 box plot of tooth length by dose drawn after theme_set made theme_bw the session default, so no per-plot theme layer is needed.

theme_set(old)   # restore the previous default

Créer votre propre thème personnalisé

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()

ggplot2 box plot of tooth length by dose styled with a custom reusable theme: white background, light grey horizontal grid only, and bold blue axis titles.

Fond transparent

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

ggplot2 box plot of tooth length by dose with the panel and plot backgrounds set to transparent, shown against the page's checkered transparency.

# to write a transparent PNG to disk, keep the background transparent on save:
# ggsave("plot.png", p, bg = "transparent")

Pour contrôler les dimensions et la résolution de l’image enregistrée, consultez le guide d’enregistrement des graphiques.

Graphique à fond noir / sombre

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")
  )

ggplot2 box plot of tooth length by dose on a black background with white axis text and faint grey grid lines for a dark-mode look.

Essayez en direct

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.

🟢 Avec un agent IA

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 →

Questions fréquentes

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().

Testez vos connaissances

Complétez le code pour que le graphique ait un fond blanc propre au lieu du panneau gris par défaut.

# A single built-in theme layer does it — try theme_bw() or theme_classic().
library(ggplot2) ggplot(ToothGrowth, aes(x = factor(dose), y = len)) + geom_boxplot(fill = "#3a86d4", alpha = 0.7) + theme_bw()
library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
  theme_bw()

Conclusion

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.

Leçons connexes

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.

Obtenir le livre (PDF) →Les leçons restent gratuites en ligne.
Cette page vous a-t-elle été utile ?

Prouvez que vous savez le faire. Maîtrisez toute la série ggplot2 — suivez votre parcours, construisez des projets et obtenez un certificat.

Commencer gratuitement →

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

Passer à Pro →

✓ Vous êtes Pro — continuez. The runtime is the judge.

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.

Partager cette pageXLinkedInRedditHN
Note

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.

Réutilisation

Citation

BibTeX
@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}
}
Veuillez citer ce travail comme suit :
“Thèmes ggplot2 dans R : personnaliser l’apparence.” 2026. June 20. https://www.datanovia.com/learn/data-visualization/ggplot2/themes.