Simuler le daltonisme en R pour tester vos figures

Voyez votre graphique comme le voit un lecteur daltonien — avec colorspace

Data Visualization

Apprenez à simuler le daltonisme en R avec le paquet colorspace — transformez une figure ggplot2 pour montrer son apparence sous deutéranopie, protanopie et tritanopie, afin de vérifier que vos couleurs sont accessibles avant de publier, puis corrigez-les avec une palette adaptée au daltonisme. Chaque figure est rendue à partir de vrai code R à copier-coller.

Auteur·rice
Date de publication

8 juillet 2026

Modifié

16 juillet 2026

AstuceCe que vous allez apprendre
  • Les trois fonctions qui font le travail — deutan(), protan() et tritan() du paquet colorspace — et ce qu’est chaque type de déficience de la vision des couleurs.
  • Comment simuler une figure ggplot2 entière sous chaque déficience, pour voir le problème au lieu de le deviner.
  • Pourquoi la palette par défaut de ggplot2 échoue au test rouge-vert — et la correction viridis en une ligne qui le réussit.
  • Pas besoin de colorblindr : colorspace est sur CRAN et fait tout ce dont on a besoin ici.

Vous avez choisi des couleurs qui rendent superbement à l’écran. Mais jusqu’à 1 homme sur 12 (environ 8 %) et 1 femme sur 200 présentent une déficience de la vision des couleurs rouge-vert (NEI) — une part non négligeable de vos lecteurs peut donc ne pas voir la distinction dont dépend votre figure. La solution n’est pas de deviner : simulez l’apparence de votre graphique pour un lecteur daltonien, avant de publier, et ajustez si des groupes se confondent.

Cet article fait exactement cela avec le paquet colorspace (sur CRAN — pas de paquets de développement, pas de colorblindr). Nous allons simuler une figure ggplot2 sous les trois déficiences, repérer où la palette par défaut échoue, et la corriger.

Les trois fonctions dont vous avez besoin

colorspace fournit trois fonctions qui prennent n’importe quel vecteur de couleurs et renvoient ce qu’une personne atteinte de cette déficience perçoit :

  • deutan()deutéranopie, la forme la plus courante (sensibilité au vert réduite ; confusion rouge-vert).
  • protan()protanopie (sensibilité au rouge réduite ; confusion rouge-vert également).
  • tritan()tritanopie, rare (sensibilité au bleu réduite ; confusion bleu-jaune).

Commencez par la palette que ggplot2 vous donne par défaut. Pour trois groupes, c’est un trio rouge, vert et bleu. Passez ces couleurs dans chaque fonction de simulation pour voir comment elles se transforment :

library(colorspace)

pal <- scales::hue_pal()(3)   # ggplot2's default palette for 3 groups
pal
[1] "#F8766D" "#00BA38" "#619CFF"
deutan(pal)                   # how a deuteranope perceives them
[1] "#B6A86A" "#AC9C45" "#5A96FD"

Les codes hexadécimaux changent, mais les nombres sont difficiles à lire. Utilisez colorspace::swatchplot() pour regarder chaque palette côte à côte — la vision normale en haut, puis chaque déficience en dessous :

Four rows of colour swatches — normal vision, deuteranopia, protanopia, tritanopia — for the default ggplot2 red, green, blue palette; under deuteranopia and protanopia the red and green swatches drift toward the same muddy tone.

swatchplot(
  "Normal vision" = pal,
  "Deuteranopia"  = deutan(pal),
  "Protanopia"    = protan(pal),
  "Tritanopia"    = tritan(pal)
)

Lisez chaque colonne de haut en bas : sous deutéranopie et protanopie, les nuanciers rouge et vert dérivent vers un même jaune-brun terne — un lecteur rouge-vert peut à peine les distinguer — tandis que le bleu reste distinct. Sous tritanopie, c’est le bleu qui se décale. C’est exactement le problème que vous voulez repérer avant qu’il n’atteigne une figure.

Simuler une figure ggplot2 entière

Les nuanciers, c’est le diagnostic ; le vrai test, c’est votre graphique réel. L’astuce sans colorblindr est simple : redessiner la figure en remplaçant le remplissage de chaque groupe par sa couleur simulée. Ce que le deutéranope perçoit, nous le peignons littéralement — le résultat en facettes est donc la simulation.

D’abord, une petite fonction utilitaire. Elle prend une palette, calcule les versions deutan/protan/tritan et empile quatre copies des données — une par type de vision — avec une colonne fill_hex contenant la couleur déjà simulée pour chaque ligne :

library(ggplot2)
library(colorspace)

cvd_data <- function(pal) {
  names(pal) <- levels(iris$Species)
  sims <- list(
    "Normal vision" = pal,
    "Deuteranopia"  = deutan(pal),
    "Protanopia"    = protan(pal),
    "Tritanopia"    = tritan(pal)
  )
  do.call(rbind, lapply(names(sims), function(v) {
    d <- iris
    d$vision   <- factor(v, levels = names(sims))
    d$fill_hex <- sims[[v]][as.character(d$Species)]
    d
  }))
}

Maintenant, traçons-la. La clé, c’est scale_fill_identity() : nous avons déjà calculé le code hexadécimal exact par ligne, donc ggplot2 doit utiliser ces couleurs telles quelles plutôt que de les faire passer par une échelle. Mettez en facettes selon vision et vous obtenez un panneau par déficience :

cvd_facets <- function(pal, title) {
  ggplot(cvd_data(pal), aes(Species, Sepal.Length, fill = fill_hex)) +
    geom_boxplot(colour = "grey30", outlier.size = 0.6) +
    scale_fill_identity() +
    facet_wrap(~ vision, nrow = 1) +
    labs(title = title, x = NULL, y = "Sepal length (cm)") +
    theme_minimal(base_size = 12) +
    theme(legend.position = "none")
}

Exécutez-la sur la palette par défaut et lisez les quatre panneaux :

cvd_facets(pal, "Default ggplot2 palette")

An iris Sepal.Length boxplot coloured by species with the default ggplot2 palette, faceted into normal vision, deuteranopia, protanopia and tritanopia; under deuteranopia and protanopia the setosa and versicolor boxes take on nearly the same muddy tone.

Dans le panneau Vision normale, les trois espèces sont clairement rouge, verte, bleue. Glissez vers la droite jusqu’à Deutéranopie et Protanopie : deux des trois boîtes convergent vers une même teinte terne — un lecteur rouge-vert doit maintenant se rabattre sur la position des boîtes pour distinguer les groupes, ce qui va à l’encontre du but même d’une coloration par groupe. La palette par défaut échoue au test.

La correction : une palette adaptée au daltonisme

La correction fiable, c’est une palette conçue pour rester distinguable malgré les déficiences. viridis (livrée avec ggplot2) est la référence : elle fait varier les couleurs par luminosité autant que par teinte, si bien que les groupes restent séparables même quand la teinte se confond. Remplacez une seule ligne d’échelle :

ggplot(iris, aes(Species, Sepal.Length, fill = Species)) +
  geom_boxplot(colour = "grey30", outlier.size = 0.6) +
  scale_fill_viridis_d() +
  labs(x = NULL, y = "Sepal length (cm)") +
  theme_minimal(base_size = 12) +
  theme(legend.position = "none")

An iris Sepal.Length boxplot coloured by species using the viridis discrete palette — dark purple, teal, and yellow — under normal vision.

Maintenant, soumettez viridis au même parcours de simulation — réutilisez la fonction utilitaire en lui fournissant cette fois les couleurs de viridis :

pal_viridis <- substr(viridisLite::viridis(3), 1, 7)   # drop the alpha byte
cvd_facets(pal_viridis, "Viridis palette")

An iris boxplot in the viridis palette faceted into normal vision, deuteranopia, protanopia and tritanopia; the dark-purple, teal and yellow boxes stay clearly distinct in every panel because they differ in lightness.

Dans les quatre panneaux, les trois boîtes restent distinctes — foncée, moyenne, claire — parce que viridis les sépare par la luminosité, pas seulement par la teinte. Cette différence survit à chaque déficience. C’est pourquoi viridis (et ses cousines des palettes de revues scientifiques jco/npg) est le choix par défaut sûr pour les figures groupées.

Note

La couleur est un indice utile, pas le seul indice. Pour l’impression, les petits multiples ou une robustesse maximale, ajoutez un second canal — des formes distinctes, des types de trait, des étiquettes directes ou des facettes — pour que la figure reste lisible en niveaux de gris.

Un flux de travail en trois étapes

Intégrez cette vérification à votre façon de finaliser une figure :

  1. Dessinez la figure avec la palette que vous avez choisie.
  2. Simulez-la — deutan(), protan(), tritan() sur la palette (ou la version redessinée en facettes ci-dessus) — et cherchez les groupes qui se confondent.
  3. Itérez les couleurs jusqu’à ce que chaque groupe reste distinguable dans toutes les conditions ; tournez-vous vers viridis ou une palette de revue scientifique en cas de doute.

Foire aux questions

Ce sont les trois types de dichromatisme, chacun dû à un cône manquant. La deutéranopie (cône vert manquant) et la protanopie (cône rouge manquant) provoquent toutes deux une confusion rouge-vert et sont de loin les plus courantes. La tritanopie (cône bleu manquant) provoque une confusion bleu-jaune et est rare. Dans colorspace, elles correspondent à deutan(), protan() et tritan().

Environ 8 % des hommes (à peu près 1 sur 12) et 0.5 % des femmes présentent une forme de déficience de la vision des couleurs rouge-vert (National Eye Institute). À ce taux, presque toute figure destinée à un large public a des lecteurs daltoniens, et c’est pourquoi simuler avant de publier vaut bien les deux lignes supplémentaires.

Non. Le paquet colorblindr, plus ancien, n’est pas sur CRAN et dépend de versions de développement d’autres paquets. colorspace est sur CRAN et fournit deutan(), protan() et tritan() — tout dans cet article n’utilise que colorspace et ggplot2.

En grande partie, oui. viridis fait varier la luminosité de façon monotone autant que la teinte, si bien que les catégories restent séparables même quand la perception de la teinte se confond — comme le montrent les panneaux de simulation ci-dessus. Ce n’est pas une formule magique pour les distinctions catégorielles fines, alors simulez tout de même votre propre figure, et ajoutez un indice non coloré (forme, étiquette, facette) pour les graphiques les plus critiques.

Les fonctions deutan()/protan()/tritan() de colorspace opèrent sur des valeurs de couleur, donc la voie la plus propre en R est de simuler la palette et de redessiner la figure, comme montré ici. Pour transformer une image matricielle existante, lisez ses pixels (par exemple avec le paquet magick) et passez les couleurs des pixels dans les mêmes fonctions.

Aller plus loin dans /learn

Cet article est la recette ciblée. Pour les leçons complètes sur le choix et l’application des couleurs dans ggplot2 — échelles, palettes manuelles et couleurs nommées — voyez :

À voir aussi

🟢 Avec un agent IA

Demandez à Prova « simule ma figure ggplot2 sous deutéranopie et suggère une palette adaptée au daltonisme » — elle répond avec du code que vous pouvez exécuter sur vos propres données. The runtime is the judge. Demander à Prova →

Cette page vous a-t-elle été utile ?

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

Citation

BibTeX
@online{kassambara2026,
  author = {Kassambara, Alboukadel},
  title = {Simuler le daltonisme en R pour tester vos figures},
  date = {2026-07-08},
  url = {https://www.datanovia.com/blog/simulate-colorblindness-in-r},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
Kassambara, Alboukadel. 2026. “Simuler le daltonisme en R pour tester vos figures.” July 8. https://www.datanovia.com/blog/simulate-colorblindness-in-r.