Couleurs ggplot2 en R : changer les couleurs par groupe

Définissez une couleur unique, colorez par groupe et créez des palettes personnalisées — en direct dans votre navigateur

Apprenez à changer les couleurs ggplot2 en R — définissez une couleur par nom ou par code hexadécimal, colorez par groupe, créez des palettes personnalisées avec scale_fill_manual(), utilisez les palettes viridis et Brewer adaptées au daltonisme, des échelles de gris et des dégradés continus. Modifiez et exécutez le code en direct, sans installation.

Date de publication

20 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Définissez une seule couleur pour chaque forme avec une constante en dehors de aes()fill pour les aires, colour pour les points et les lignes, par nom ("steelblue") ou par code hexadécimal ("#3a86d4").
  • Colorez par groupe en associant un facteur à fill ou colour à l’intérieur de aes() ; ggplot2 choisit les couleurs de teinte par défaut et ajoute une légende.
  • Définissez votre propre palette avec scale_fill_manual(values = ...) / scale_colour_manual(values = ...).
  • Préférez une échelle adaptée au daltonisme pour les groupes : scale_fill_viridis_d() (discrète) est notre choix par défaut ; le vecteur Okabe–Ito est une alternative prête à l’emploi.
  • Utilisez les palettes RColorBrewer avec scale_fill_brewer(palette = ...), et les échelles de gris avec scale_fill_grey().
  • Pour une variable numérique, colorez sur un dégradé continu — un dégradé bicolore scale_colour_gradient(), un dégradé divergent scale_colour_gradient2(), un dégradé à n couleurs scale_colour_gradientn(), ou un scale_colour_viridis_c() adapté au daltonisme.
  • Chaque graphique ci-dessous est rendu pour vous — ajustez ensuite n’importe quel exemple en direct dans le bac à sable.
Obtenez le livre — GGPlot2 Essentials (PDF)

Introduction

La couleur est ce qui permet à une figure ggplot2 de distinguer les groupes et d’attirer le regard. En R, ggplot2 vous donne deux contrôles distincts — fill pour l’intérieur des aires (boîtes, barres, violons) et colour pour les points, lignes et contours — ainsi qu’une famille de fonctions scale_* pour choisir précisément les couleurs auxquelles ils sont associés. Cette leçon couvre la mécanique des couleurs : une couleur fixe, la coloration par groupe, les palettes personnalisées et adaptées au daltonisme, et les dégradés continus. Les figures sont rendues ici même, et vous pouvez réexécuter ou modifier n’importe laquelle d’entre elles en direct.

Si vous voulez simplement parcourir les palettes — les galeries viridis et RColorBrewer, les 657 couleurs R nommées, ou les palettes de revues scientifiques — consultez le guide des palettes de couleurs R qui l’accompagne ; cette leçon reste centrée sur les fonctions scale_* qui les appliquent.

Nous utilisons le jeu de données intégré ToothGrowth : la longueur des cellules odontoblastes (len) chez des cobayes recevant de la vitamine C à trois doses (dose : 0.5, 1 ou 2 mg/jour) via deux méthodes d’administration (supp : jus d’orange OJ ou acide ascorbique VC).

Définir une couleur unique

Pour peindre chaque forme de la même couleur, définissez la couleur comme une constante en dehors de aes(). Utilisez fill pour l’intérieur de l’aire et colour pour les points, lignes et contours. Les couleurs sont indiquées par nom ("steelblue") ou par code hexadécimal ("#3a86d4").

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

ggplot2 box plot of tooth length by dose, every box filled with the same brand azure colour.

fill ou colour : intérieur ou contour

fill et colour sont deux attributs esthétiques distincts. fill est l’intérieur de l’aire ; colour est le contour (et, pour les points et les lignes, la marque elle-même). Définissez-les indépendamment — ici un contour foncé autour d’un remplissage azur adouci :

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_boxplot(fill = "#3a86d4", colour = "grey25", alpha = 0.7) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 box plot of tooth length by dose with a dark grey outline around a softened azure fill.

Pour les géométries de points et de lignes, il n’y a pas d’intérieur, c’est donc colour qu’il faut définir :

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_jitter(width = 0.15, colour = "#3a86d4", size = 2, alpha = 0.7) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 strip chart of tooth length by dose with all points drawn in brand azure.

Colorer par groupe (couleurs par défaut)

Pour colorer chaque groupe différemment, associez un facteur à fill ou colour à l’intérieur de aes(). ggplot2 attribue sa palette de teintes par défaut et ajoute automatiquement une légende — aucune échelle n’est nécessaire.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = factor(dose))) +
  geom_boxplot() +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Dose") +
  theme_minimal()

ggplot2 box plot of tooth length by dose with each box filled a different default ggplot2 colour and a legend.

Il en va de même pour colour avec les points et les lignes — associez le groupe à colour plutôt qu’à fill :

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, colour = factor(dose))) +
  geom_jitter(width = 0.15, size = 2) +
  labs(x = "Dose (mg/day)", y = "Tooth length", colour = "Dose") +
  theme_minimal()

ggplot2 strip chart of tooth length by dose with points coloured by dose and a legend.

Définir manuellement des couleurs personnalisées

Pour choisir vous-même les couleurs exactes, ajoutez scale_fill_manual(values = ...) (ou scale_colour_manual() pour les points et les lignes). Passez une couleur par groupe, par nom ou par code hexadécimal.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = factor(dose))) +
  geom_boxplot() +
  scale_fill_manual(values = c("#3a86d4", "#f5a524", "#2a9d8f")) +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Dose") +
  theme_minimal()

ggplot2 box plot of tooth length by dose filled with three hand-picked colours via scale_fill_manual.

Vous pouvez aussi nommer les valeurs pour lier une couleur précise à un groupe précis, quel que soit l’ordre — et l’argument breaks contrôle quelles clés (et leur ordre) apparaissent dans la légende :

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = supp)) +
  geom_boxplot() +
  scale_fill_manual(
    values = c(OJ = "#3a86d4", VC = "#f5a524"),
    breaks = c("OJ", "VC")
  ) +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Supplement") +
  theme_minimal()

ggplot2 grouped box plot of tooth length by dose with named manual colours for the OJ and VC supplements.

Pour l’ensemble des contrôles de légende — titre, étiquettes, ordre, position et style — consultez le guide des légendes ggplot2.

Palettes adaptées au daltonisme (viridis)

Pour les groupes, préférez une échelle adaptée au daltonisme afin que la figure soit lisible pour tout le monde, en couleur ou à l’impression. Notre choix par défaut est viridis : scale_fill_viridis_d() pour un remplissage discret, scale_colour_viridis_d() pour une couleur discrète.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = factor(dose))) +
  geom_boxplot() +
  scale_fill_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Dose") +
  theme_minimal()

ggplot2 box plot of tooth length by dose filled with a colourblind-safe viridis palette.

Si vous préférez choisir les couleurs à la main, la palette Okabe–Ito est un vecteur adapté au daltonisme bien éprouvé que vous pouvez insérer directement dans scale_fill_manual() :

library(ggplot2)
# Okabe-Ito colourblind-safe palette (a ready-made vector — first three values here)
cbp <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442",
         "#0072B2", "#D55E00", "#CC79A7", "#999999")
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = factor(dose))) +
  geom_boxplot() +
  scale_fill_manual(values = cbp) +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Dose") +
  theme_minimal()

ggplot2 box plot of tooth length by dose filled with three colours from the Okabe-Ito colourblind-safe palette.

Palettes RColorBrewer

ggplot2 est livré avec des échelles RColorBrewer : scale_fill_brewer(palette = ...) et scale_colour_brewer(palette = ...). Nommez une palette qualitative comme "Set2" ou "Dark2" pour des groupes catégoriels. (La galerie Brewer complète se trouve dans le guide des palettes de couleurs R.)

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = factor(dose))) +
  geom_boxplot() +
  scale_fill_brewer(palette = "Set2") +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Dose") +
  theme_minimal()

ggplot2 box plot of tooth length by dose filled with the RColorBrewer Set2 palette.

Échelles de couleurs en gris

Pour l’impression ou un rendu volontairement sobre, associez les groupes à une échelle de gris avec scale_fill_grey() (ou scale_colour_grey()). Ajustez start et end pour définir le gris le plus clair et le plus foncé.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = factor(dose))) +
  geom_boxplot() +
  scale_fill_grey(start = 0.8, end = 0.2) +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Dose") +
  theme_minimal()

ggplot2 box plot of tooth length by dose filled with a greyscale palette from light to dark.

Couleurs continues (dégradé)

Lorsque la couleur est associée à une variable numérique, ggplot2 utilise un dégradé continu. Ici, nous résumons les moyennes par groupe directement dans le bloc avec la fonction aggregate() de base de R et colorons les points selon cette moyenne. Trois échelles couvrent les cas courants :

  • scale_colour_gradient(low, high) — un dégradé bicolore.
  • scale_colour_gradient2(low, mid, high, midpoint) — un dégradé divergent autour d’un point médian.
  • scale_colour_gradientn(colours = ...) — un dégradé à travers n couleurs.
library(ggplot2)
# group means, computed in-block with base R (no dplyr)
tg_mean <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
ggplot(tg_mean, aes(x = dose, y = len, colour = len)) +
  geom_point(size = 6) +
  scale_colour_gradient(low = "#cfe3f6", high = "#1f4e79") +
  labs(x = "Dose (mg/day)", y = "Mean tooth length", colour = "Mean length") +
  theme_minimal()

ggplot2 scatter plot of mean tooth length by dose with points coloured on a light-to-dark azure gradient.

Un dégradé divergent (scale_colour_gradient2()) est utile lorsque les valeurs se répartissent de part et d’autre d’un centre significatif — ici la longueur moyenne globale :

library(ggplot2)
tg_mean <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
mid <- mean(ToothGrowth$len)
ggplot(tg_mean, aes(x = dose, y = len, colour = len)) +
  geom_point(size = 6) +
  scale_colour_gradient2(
    low = "#3a86d4", mid = "grey85", high = "#d62828",
    midpoint = mid
  ) +
  labs(x = "Dose (mg/day)", y = "Mean tooth length", colour = "Mean length") +
  theme_minimal()

ggplot2 scatter plot of mean tooth length by dose with points on a diverging blue-to-red gradient centred on the overall mean.

Pour un dégradé à n couleurs, scale_colour_gradientn() interpole à travers tout un vecteur de couleurs — utile pour des rampes à plusieurs paliers ou pour insérer une palette prête à l’emploi (ici les couleurs viridis) :

library(ggplot2)
tg_mean <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
ggplot(tg_mean, aes(x = dose, y = len, colour = len)) +
  geom_point(size = 6) +
  scale_colour_gradientn(colours = c("#440154", "#21908c", "#fde725")) +
  labs(x = "Dose (mg/day)", y = "Mean tooth length", colour = "Mean length") +
  theme_minimal()

ggplot2 scatter plot of mean tooth length by dose with points coloured on a multi-stop viridis gradient via scale_colour_gradientn.

Pour un dégradé viridis continu sans nommer les paliers vous-même, utilisez scale_colour_viridis_c() (le jumeau continu _c de l’échelle discrète _d utilisée plus haut) — la même palette adaptée au daltonisme, appliquée à une variable numérique :

library(ggplot2)
tg_mean <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
ggplot(tg_mean, aes(x = dose, y = len, colour = len)) +
  geom_point(size = 6) +
  scale_colour_viridis_c() +
  labs(x = "Dose (mg/day)", y = "Mean tooth length", colour = "Mean length") +
  theme_minimal()

ggplot2 scatter plot of mean tooth length by dose with points coloured on a continuous colourblind-safe viridis gradient.

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 des couleurs matplotlib/seaborn arrive bientôt dans la série Python.

🟢 Avec un agent IA

Demandez à Prova « cette palette est-elle adaptée au daltonisme, et comment la remplacer par viridis ? » — elle répond avec du code que vous pouvez exécuter, de sorte que l’explication est reproductible. The runtime is the judge. Ask Prova →

Questions fréquentes

fill peint l’intérieur des aires (boîtes, barres, violons), tandis que colour contrôle les points, lignes et contours. Pour les géométries de points et de lignes, il n’y a pas d’intérieur, définissez donc colour ; pour une boîte avec une bordure colorée autour d’un intérieur coloré, définissez les deux (par exemple geom_boxplot(fill = "#3a86d4", colour = "grey25")).

Vous avez défini la couleur comme une constante en dehors de aes(), ce qui la fixe pour chaque forme. Pour colorer par groupe, associez le facteur de regroupement à l’intérieur de aes() — par exemple aes(fill = factor(dose)) — et ggplot2 ajoute automatiquement les couleurs et une légende.

Ajoutez scale_fill_manual(values = ...) pour les remplissages (ou scale_colour_manual() pour les points et les lignes) et passez une couleur par groupe, par nom ou par code hexadécimal. Vous pouvez nommer les valeurs comme c(OJ = "#3a86d4", VC = "#f5a524") pour lier une couleur précise à un groupe précis, quel que soit l’ordre.

Utilisez une échelle viridis — scale_fill_viridis_d() pour un remplissage discret ou scale_colour_viridis_d() pour une couleur discrète (utilisez les jumeaux _c pour une variable numérique). Si vous préférez choisir les couleurs à la main, insérez le vecteur Okabe–Ito dans scale_fill_manual(values = ...).

Lorsque vous associez une variable numérique à colour ou fill, ggplot2 utilise un dégradé continu. Définissez les couleurs avec scale_colour_gradient(low, high) pour deux couleurs, scale_colour_gradient2(low, mid, high, midpoint) pour une rampe divergente autour d’un centre, ou scale_colour_gradientn(colours = ...) pour interpoler à travers plusieurs.

Testez vos connaissances

Complétez le code pour que les boîtes soient remplies selon dose avec une palette adaptée au daltonisme.

# Add a discrete viridis fill scale, e.g. scale_fill_viridis_d()
library(ggplot2) ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = factor(dose))) + geom_boxplot() + scale_fill_viridis_d()
library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = factor(dose))) +
  geom_boxplot() +
  scale_fill_viridis_d()

Conclusion

Vous avez défini une couleur unique avec une constante en dehors de aes(), distingué fill de colour, coloré par groupe avec la teinte par défaut et une légende, créé votre propre palette avec scale_fill_manual(), opté pour une échelle viridis ou Brewer adaptée au daltonisme, utilisé une échelle de gris pour l’impression, et associé une variable numérique à un dégradé continu — bicolore, divergent, à n couleurs (scale_colour_gradientn()), et un viridis continu adapté au daltonisme (scale_colour_viridis_c()). Ensuite, appliquez la couleur à d’autres géométries — la boîte à moustaches, le graphique en violon et le diagramme en barres — et explorez le 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 = {Couleurs ggplot2 en R : changer les couleurs par groupe},
  date = {2026-06-20},
  url = {https://www.datanovia.com/learn/data-visualization/ggplot2/colors},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Couleurs ggplot2 en R : changer les couleurs par groupe.” 2026. June 20. https://www.datanovia.com/learn/data-visualization/ggplot2/colors.