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"
Voyez votre graphique comme le voit un lecteur daltonien — avec colorspace
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.
deutan(), protan() et tritan() du paquet colorspace — et ce qu’est chaque type de déficience de la vision des couleurs.viridis en une ligne qui le réussit.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.
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 :
[1] "#F8766D" "#00BA38" "#619CFF"
[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 :

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.
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 :
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 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 :

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

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.
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.
Intégrez cette vérification à votre façon de finaliser une figure :
deutan(), protan(), tritan() sur la palette (ou la version redessinée en facettes ci-dessus) — et cherchez les groupes qui se confondent.viridis ou une palette de revue scientifique en cas de doute.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.
/learnCet 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 :
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 →
@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}
}