Une palette de couleurs, ça ne se choisit pas au hasard

Data viz
Tutoriels R
Séquentiel, divergent, qualitatif : trois familles de palettes, trois logiques différentes. Et pourquoi jet c’est toujours une mauvaise idée.
Auteur·rice

Thelma Panaïotis

Date de publication

18 mai 2026

Mots clés

dataviz, couleurs, palette, ggplot2, viridis, cmocean, RColorBrewer, R

Une palette de couleurs, ça ne se choisit pas au hasard

Séquentiel, divergent, qualitatif : trois familles de palettes, trois logiques différentes.

Cet article fait partie d’une série sur les couleurs en dataviz :

  • Partie 1 : Choisir sa palette
  • Partie 2 : Les palettes qualitatives
  • Partie 3 : Dataviz accessible

Trois familles, trois logiques

Quand on choisit une palette de couleurs pour un graphique, on pense souvent esthétique. Est-ce que ça rend bien ? Est-ce que les couleurs s’harmonisent ? C’est une question légitime, mais c’est la mauvaise question. Le bon point de départ, c’est : quelle est la nature de ma variable ?

Il existe trois grandes familles de palettes, qui correspondent à trois types de données différents.

Séquentiel : encoder une grandeur

Une palette séquentielle encode une variable continue sans point de référence central. C’est le bon choix pour une température absolue, une concentration, un revenu, une densité de population.

penguins |>
  drop_na(body_mass_g) |>
  ggplot(aes(x = flipper_length_mm, y = bill_length_mm, colour = body_mass_g)) +
  geom_point(size = 2) +
  scale_colour_viridis_c(option = "mako") +
  labs(
    x = "Longueur des nageoires (mm)",
    y = "Longueur du bec (mm)",
    colour = "Masse (g)"
  )
Figure 1: Palette séquentielle : la masse des manchots, du plus léger au plus lourd.

Divergent : une variable avec un centre qui a du sens

Une palette divergente encode une variable qui s’étend dans deux directions à partir d’un point central significatif : zéro, une moyenne, un seuil. Les deux extrêmes ont des couleurs distinctes, le centre est neutre. C’est la palette pour les anomalies, les corrélations, les résidus : toutes les situations où s’éloigner du centre dans un sens ou dans l’autre est porteur de sens.

penguins |>
  drop_na(body_mass_g, species) |>
  group_by(species) |>
  mutate(anomalie = body_mass_g - mean(body_mass_g)) |>
  ungroup() |>
  ggplot(aes(x = flipper_length_mm, y = bill_length_mm, colour = anomalie)) +
  geom_point(size = 2) +
  scale_colour_distiller(palette = "RdYlBu", limits = c(-1500, 1500)) +
  labs(
    x = "Longueur des nageoires (mm)",
    y = "Longueur du bec (mm)",
    colour = "Anomalie de masse (g)"
  )
Figure 2: Palette divergente : anomalie de masse par rapport à la moyenne de l’espèce. Le jaune correspond à zéro : un centre qui a du sens.

Qualitatif : des catégories sans ordre

Une palette qualitative encode des catégories distinctes sans relation d’ordre : des espèces, des pays, des groupes. Les couleurs doivent être suffisamment différentes pour qu’on distingue chaque catégorie, mais aucune ne doit sembler « plus haute » ou « plus basse » qu’une autre.

penguins |>
  drop_na() |>
  ggplot(aes(x = flipper_length_mm, y = bill_length_mm, colour = species)) +
  geom_point(size = 2) +
  scale_colour_brewer(palette = "Set2") +
  labs(
    x = "Longueur des nageoires (mm)",
    y = "Longueur du bec (mm)",
    colour = "Espèce"
  )
Figure 3: Palette qualitative : trois espèces de manchots, trois couleurs distinctes sans hiérarchie.

Le choix entre ces trois familles n’est pas esthétique, il est conceptuel. Choisir la mauvaise famille, c’est mentir à son lecteur sans le vouloir. On verra en section 3 un exemple classique de ce glissement.

Et les catégories ordonnées ?

Il existe un cas intermédiaire souvent oublié : les variables ordinales, c’est-à-dire des catégories qui ont un ordre naturel mais pas de valeur numérique continue. Par exemple des tranches d’âge, des niveaux de satisfaction, ou faible / moyen / fort.

Ni une palette qualitative (qui ignore l’ordre) ni une palette séquentielle continue (qui suppose des intervalles réguliers) ne conviennent vraiment. La bonne réponse est une palette séquentielle discrète, comme scale_fill_brewer(palette = "Blues") avec des niveaux ordonnés, ou scale_fill_steps() pour discrétiser une variable continue.

penguins |>
  drop_na(body_mass_g) |>
  mutate(masse_cat = cut(
    body_mass_g,
    breaks = 4,
    labels = c("Légère", "Moyenne", "Lourde", "Très lourde"))
  ) |>
  ggplot(aes(x = flipper_length_mm, y = bill_length_mm, colour = masse_cat)) +
  geom_point(size = 2) +
  scale_colour_brewer(palette = "RdPu", direction = 1) +
  labs(
    x = "Longueur des nageoires (mm)",
    y = "Longueur du bec (mm)",
    colour = "Masse"
  )
Figure 4: Palette séquentielle discrète : la masse des manchots découpée en quatre tranches ordonnées.

jet, viridis : le bon outil pour les données continues

Pour les palettes séquentielles et divergentes, le choix de la palette elle-même compte autant que le choix de la famille. Et il existe une palette qu’on retrouve partout, dans les publications scientifiques comme dans les dashboards d’entreprise, et qui pose de vrais problèmes : la palette arc-en-ciel, connue sous le nom de jet.

Pourquoi jet c’est mal

Figure 5: Température moyenne annuelle en France avec la palette jet.

La quasi-totalité de la plaine française est noyée dans une masse orange-rouge indistincte, tandis que les Alpes explosent visuellement, donnant l’impression d’un contraste radical entre montagne et plaine, alors que l’écart est progressif dans les données.

C’est le problème fondamental de jet : elle n’est pas perceptuellement uniforme (Crameri, Shephard, et Heron 2020). Un même écart de température ne produit pas le même saut visuel selon l’endroit où on se trouve sur le gradient. Certaines zones paraissent très contrastées, d’autres homogènes, sans que les données le justifient. Et comme on le verra dans le prochain article de la série, jet est aussi particulièrement problématique pour les personnes daltoniennes.

viridis : la solution universelle

Figure 6: La même carte avec viridis. Le gradient est perceptuellement uniforme : un même écart de température produit le même saut visuel partout.

Avec viridis, les faux contrastes disparaissent. On distingue maintenant clairement le gradient nord-sud, le couloir rhodanien, et la transition vers les sommets alpins. Rien n’explose, rien n’est écrasé : chaque degré compte autant visuellement que les autres.

viridis n’est pas une palette unique mais une famille : cinq variantes sont disponibles dans ggplot2 via l’argument option.

Figure 7: Les cinq palettes de la famille viridis.

Toutes sont perceptuellement uniformes et accessibles aux daltoniens. viridis est la valeur par défaut ; magma et inferno conviennent bien aux fonds sombres ; cividis est conçue pour être identique en vision normale et en vision daltonienne.

viridis est le bon réflexe par défaut, mais il existe des cas où on peut faire encore mieux. C’est ce qu’on verra avec cmocean en section 3.

Quand la palette parle avant la légende

viridis est le choix universel et sûr. Mais il existe des cas où la palette peut faire plus que représenter correctement les données : elle peut renforcer l’intuition du lecteur. C’est la philosophie de cmocean (Thyng et al. 2016) : des palettes conçues pour des variables à fort sens physique.

Figure 8: Quelques palettes cmocean disponibles dans R.

thermal pour la température, rain pour les précipitations, deep pour la profondeur, solar pour le rayonnement : la palette encode le sens de la variable. On lit la carte avant même de regarder la légende.

Figure 9: Température moyenne annuelle en France avec cmocean thermal. Le violet évoque le froid, l’orange évoque le chaud : la lecture est immédiate.

Quand la palette ne suffit pas : transformer l’échelle

Choisir la bonne palette ne suffit pas toujours. Quand les données sont très asymétriques, c’est l’échelle qu’il faut adapter, pas la palette. Les précipitations en sont un bon exemple : beaucoup de zones avec des valeurs faibles, quelques massifs avec des valeurs très élevées. La palette rain est le bon choix, mais sur une échelle linéaire, les nuances dans les zones moins arrosées sont écrasées par les extrêmes. Une transformation log corrige ça.

Figure 10: Précipitations annuelles en France avec une échelle linéaire (gauche) et transformée log (droite). La transformation révèle les nuances dans les zones moins arrosées, écrasées par les valeurs extrêmes des massifs montagneux.

La transformation (log, sqrt…) s’applique directement dans scale_fill_* via l’argument trans. Elle ne modifie pas les données, seulement la façon dont l’échelle de couleur leur est mappée.

Les palettes divergentes : quand le centre a du sens

cmocean propose aussi des palettes divergentes, et c’est l’occasion de revenir sur un point de la section 1 : une palette divergente n’est légitime que si le centre de la palette correspond à une valeur qui a du sens dans les données.

L’erreur classique : utiliser une palette bleu-blanc-rouge pour des températures absolues. Ça semble intuitif (le bleu pour le froid, le rouge pour le chaud) mais ça induit une lecture fausse. Où met-on le blanc ? À 0 °C ? À la moyenne de la période ? Le choix est arbitraire, et la carte suggère qu’il existe un seuil naturel là où il n’y en a pas.

Figure 11: Palette divergente sur des températures absolues : le blanc est situé autour de 3°C, ce qui suggère faussement que cette valeur est un seuil significatif.

En revanche, sur une différence ou un écart par rapport à une référence, le centre a du sens. Prenons l’écart de précipitations entre juillet et janvier : zéro signifie que les deux mois sont aussi arrosés l’un que l’autre, le brun indique un juillet plus sec, le vert un juillet plus humide. La palette divergente traduit immédiatement cette symétrie.

Figure 12: Écart de précipitations juillet − janvier. Le brun indique un juillet plus sec que janvier, le vert un juillet plus arrosé.

Le choix d’une palette n’est pas esthétique. Une palette séquentielle suppose qu’il n’y a pas de centre naturel dans les données. Une palette divergente suppose qu’il y en a un. Une palette qualitative suppose que les catégories sont équivalentes. Se tromper, c’est introduire une structure dans les données qui n’existe pas.

Dans le prochain article de la série, on s’attaque aux palettes qualitatives : combien de couleurs peut-on vraiment distinguer, et que faire quand on a trop de catégories ?

Les références

Crameri, Fabio, Grace E. Shephard, et Philip J. Heron. 2020. « The Misuse of Colour in Science Communication ». Nature Communications 11 (1): 5444. https://doi.org/10.1038/s41467-020-19160-7.
Thyng, Kristen M., Chad A. Greene, Robert D. Hetland, Heather M. Zimmerle, et Steven F. DiMarco. 2016. « True Colors of Oceanography: Guidelines for Effective and Accurate Colormap Selection ». Oceanography 29 (3): 9‑13.