You made the chart in color, and it is going to be printed on an office laser printer, photocopied, or submitted as a black-and-white PDF. Will anyone be able to tell the series apart? The usual answer is “check it”. We wanted a number, so we took the default chart colors of seven common tools, turned each color into gray the way grayscale conversion does, and measured how far apart the grays land.
Short version: every palette collapses into a narrow band of middle grays. Of 195 color pairs, none reaches the 3:1 contrast that the web accessibility guidelines ask for between adjacent parts of a chart, and 31 pairs end up within 10 gray levels of each other — close enough to look like the same gray on paper.
How we measured
The palettes are the colors each tool gives series 1, 2, 3 and so on when you do not pick
your own. We took them from the source, not from screenshots: the theme1.xml
inside real Office files for Excel, Word and PowerPoint (three generations of the Office
theme, plus the 2023 theme), matplotlib’s own color table (tab10, which
D3’s schemeCategory10 also uses), D3’s copy of Tableau 10, and
Plotly’s documented default sequence. Links are at the end.
Each color was turned into gray with the standard luma weights: 0.299 × red + 0.587
× green + 0.114 × blue. That is what our PDF to
Grayscale tool uses and what Pillow’s convert("L") uses (ITU-R 601-2).
To be sure the arithmetic matched real output, we drew all 54 colors into a PDF, ran it
through the tool, rendered the result and read the pixels back: every gray matched the
calculation exactly, as did Pillow. For contrast we used the WCAG 2.1 contrast ratio, the
same formula used for text contrast, applied to the two grays.
What came out
Top row of each palette: the colors in series order. Bottom row: the same colors in gray.
| Palette | Colors → gray | Gray range | Pairs ≤10 apart | Usable at 25+ apart | Closest pair |
|---|---|---|---|---|---|
| Office 2007–2010 | 113–170 | 4 of 15 | 2 | #c0504d → 113#8064a2 → 115 | |
| Office 2013 | 110–189 | 3 of 15 | 3 | #5b9bd5 → 142#70ad47 → 143 | |
| Office 2016–2022 | 110–189 | 3 of 15 | 3 | #5b9bd5 → 142#70ad47 → 143 | |
| Office 2023+ | 74–142 | 2 of 15 | 2 | #156082 → 77#196b24 → 74 | |
| matplotlib / D3 (tab10) | 91–171 | 6 of 45 | 3 | #1f77b4 → 100#8c564b → 101 | |
| Tableau 10 | 113–197 | 6 of 45 | 3 | #f28e2c → 161#76b7b2 → 163 | |
| Plotly | 123–205 | 7 of 45 | 3 | #00cc96 → 137#ab63fa → 138 |
Gray values run from 0 (black) to 255 (white). “Usable at 25+ apart” is the largest number of colors from the palette you could pick so that every two differ by about 10% of the gray scale. It is two or three in every palette: a chart with four series drawn in default colors will have at least two series that are hard to tell apart on paper.
The ones that bite
- Excel, Word and PowerPoint, 2016–2022 theme: series 5 (light blue,
#5b9bd5) and series 6 (green,#70ad47) become gray 142 and 143 — one level apart out of 255. Series 2, orange, lands at 150, just above them. A six-series chart in the default colors prints three nearly identical grays. - The 2023 Office theme is darker overall, and its series 1 (dark teal) and series 3 (dark green) become gray 77 and 74. All six of its colors fall between 74 and 142.
- matplotlib and D3: the default blue and the brown become 100 and 101, and the red sits at 91. The purple (126) and the palette’s own gray (127) are one level apart.
- Plotly: the first four series — blue, red, green, purple — all fall between 123 and 138, so a four-line chart in the defaults is four similar grays.
Why no palette passes 3:1
WCAG 2.1 success criterion 1.4.11 asks for a contrast ratio of at least 3:1 between parts of a graphic that are needed to understand it and the colors next to them. W3C’s own explanation names pie charts: you have to tell each slice from its neighbors. In gray, that is a very high bar. Starting from black, the next gray that reaches 3:1 is gray 90, and the next after that is gray 171; nothing lighter reaches 3:1 against 171, not even white (2.3:1). At most three fills can be told apart at 3:1 in grayscale — black, a dark gray and a mid-light gray — and none of these palettes contains black.
The same guideline is more relaxed about lines: in a line chart the lines need contrast against the background, not against each other, because they rarely touch. And if the values are also shown as text — data labels, or a table next to the chart — the colors are no longer the only way to read it.
What to do about it
- Pick colors by lightness, not by hue. If a chart must survive gray, choose colors whose grays are far apart: one dark, one middle, one light. For up to three series a single-hue ramp (dark blue, mid blue, pale blue) does this by design.
- Beyond three series, stop relying on color. Use patterns or hatching on bars, different dash styles and markers on lines, or label each series directly at the end of its line instead of in a legend.
- Show the numbers. Data labels on a pie chart or stacked bar make the colors a convenience rather than the only key.
- Check before you print. Save the document as a PDF and run it through PDF to Grayscale. It converts the colors inside the file with the same formula used here, keeps the text as text, and shows every page in gray, so you see what the printer will do before it does it.
Limits of this measurement
We measured with one conversion formula. Printer drivers, photocopiers and programs that use color profiles can turn a color into a slightly different gray, and a laser printer renders a middle gray as a dot pattern that is harder to judge than a screen value, so paper is unlikely to be kinder than these numbers. The 25-level threshold is our rule of thumb, not a standard; the 3:1 figure is the standard. Palettes change between versions — the Office 2013 theme has the same six colors as 2016–2022 with series 1 and 5 swapped — so check the version you use. The palettes were read from their sources on 27 September 2026, and the script that produced every number here reruns in under a second.
Sources
- W3C, Understanding SC 1.4.11: Non-text Contrast (WCAG 2.1)
- W3C, WCAG 2.1: contrast ratio and relative luminance
- Office theme colors from real
theme1.xmlfiles: Office 2007–2010, Office 2013, Office 2016–2022; 2023 theme: TheSpreadsheetGuru and the openxlsx2 documentation - matplotlib,
_color_data.py(TABLEAU_COLORS); D3, d3-scale-chromatic categorical schemes - Plotly, Discrete colors
- Pillow,
Image.convert(ITU-R 601-2 luma)