About 8% of men of northern European descent and about 0.5% of women have a colour vision deficiency, most commonly a red-green one. In a room of thirty people that's between one and two readers who can't separate the hues you chose. They won't tell you.
You don't need a specialist tool to simulate the effect. It's about twenty lines of arithmetic. The ViƩnot, Brettel and Mollon (1999) linear-RGB approximations transform a colour into what a dichromat sees. Compare the transformed colours in a perceptually uniform space and you get a number for how separable they remain. Using CIE Lab and the CIE76 distance, a value of about 2.3 is the classic just-noticeable difference for two large adjacent patches. Small separated marks on a chart need far more than that.
Worked example: the default rainbow palette
Take the eight-hue rainbow palette that spreadsheet software hands out by default. Under normal vision its closest pair is a purple and a magenta at a distance of 29.30, which is comfortable. Here's what simulation does to it.
| Vision | Closest pair | Distance |
|---|---|---|
| Normal | #911EB4 / #F032E6 | 29.30 |
| Deuteranope | #E6194B / #3CB44B | 9.21 |
| Protanope | #4363D8 / #F032E6 | 6.09 |
| Tritanope | #E6194B / #F032E6 | 4.49 |
To a reader with normal colour vision the red and the green are 129.86 apart. For a deuteranope they collapse to a distance of 9.21, and that's where the two series stop being separable in practice. One pair out of twenty-eight falls below 10 under that simulation and three fall below 20. If the chart's message depends on telling those two series apart, it fails for those readers completely. And it fails without anyone noticing. Notice too that the closest pair changes from one simulation to the next. Screening a palette against one deficiency doesn't screen it against the others.
Advertisement
Two more checks: the accent pair and grey-scale
Now run the accent-and-neutral pair through the same test. Normal vision gives 75.50. Deuteranope gives 82.93, protanope 76.57 and tritanope 92.29. Every value is far above the threshold. Each simulated figure is also higher than the normal-vision one, and that isn't a mistake. The simulation moves both colours, and here it happens to move them apart. The pair holds up because lightness carries its separation. There's an L* gap of 32.01 between the accent at 49.08 and the neutral at 81.09, and lightness survives every dichromat transform intact.
The grey-scale test catches the same failure with no code at all. Print the chart in black and white, or convert the palette to relative luminance and sort it. The eight rainbow hues sort to luminances of 0.102, 0.151, 0.180, 0.265, 0.341, 0.356, 0.548 and 0.752. The smallest adjacent gap is 0.0149, and three of the eight fall inside a band of 0.114. If three series can't be told apart in grey, they can't be told apart on the room's bad projector or the photocopied handout either. Nor by the reader in row four.
How can you stop relying on hue alone?
Two encodings make the whole question irrelevant, and you can use both on nearly every chart.
The first is position. Split the series into a small-multiple grid and each series gets its own panel with its own label. Hue carries nothing at all and can be identical across every panel. That's why the retention rebuild uses six panels and not six colours.
The second is direct labelling. Put each series' name at the end of its own line, in the line's own colour, and the reader never has to match a swatch to a curve. Hue becomes a backup encoding. It's no longer the only one, and that's what redundancy is for.
If you can't do either, differentiate on two channels at once, such as hue plus lightness or hue plus line style. A dashed line and a solid line of the same hue survive greyscale, dichromacy and a bad projector together.