,

Color, labels, and accessibility

9 min read
Editorial featured image for Color, labels, and accessibility. Title text reads Color, labels, and accessibility.

The chart is correct. The axes are honest. Then it hits the projector. The legend is a row of soft pastels. Red means down, green means up, and also red means “Enterprise,” because brand guidelines said so. Someone in the back asks which line is West. Someone else is colorblind and has been quietly decoding charts by position for years while meetings talk about “the red one.” Printouts for the offline attendees turn everything into similar grays. The analysis did not fail. The last mile did.

This is Part 4 of Charts that make sense. Purpose, chart type, and scales got us here. Color and labels are not decoration on top. They are how more people can use the chart under worse conditions: phones, projectors, grayscale PDFs, and varied color vision.

What you’ll learn

  • Why color is a last encoding, not the first
  • Colorblind-safe habits that still look professional
  • How labels, titles, and direct annotation beat legend hunts
  • Contrast and accessibility basics from WCAG that apply to charts
  • A worked example that redesigns a red/green traffic-light chart into a readable view

Color is a privilege, not a requirement

Position and length are easier for people to compare than hue. That is why bars and lines work. Color should reinforce a story that already exists in position, not carry the whole story alone. WCAG success criterion 1.4.1 (Use of Color) states the web version of this idea: do not use color as the only way to convey information. Charts are not exempt because they live in a slide.

Color, labels, accessibility

Practical translation for workplace charts:

  • If you removed all hue, could someone still rank the categories?
  • If the chart is printed in grayscale, does the story survive?
  • If two series share a color family, do labels still separate them?

Rule of thumb: Design the chart in grayscale first. Add color only where it reduces search time.

Do not rely on red and green alone

Red/green traffic lights are corporate muscle memory: green good, red bad. Many people with red-green color vision deficiency cannot separate those hues reliably. Even among people with typical color vision, red/green overload fights brand colors, Christmas decorations on the same slide, and projector washout.

Visual example: red/green-only status versus blue/orange with numeric labels. Meaning survives grayscale and colorblind viewing.

e4 rg before
e4 rg after

Better patterns for status:

  • Use shape or icon plus color (triangle vs circle, not only hue)
  • Use text labels: “Above target,” “On track,” “Below target”
  • Use a single hue ramp for magnitude and a separate neutral for missing
  • Use blue/orange categorical pairs when you need two hues with better separation than red/green for many viewers

ColorBrewer, developed for cartography, remains a practical palette reference for sequential, diverging, and qualitative schemes, including colorblind-friendly options. You do not need to memorize hex codes. You need a short approved set for your team so every deck does not invent a new rainbow.

Team norms help more than individual taste. Publish a tiny internal note: four qualitative colors, one sequential ramp, one diverging ramp, and a neutral gray for “other” or “not selected.” Link ColorBrewer or your design system once. Then stop debating hex codes in every analytics review. Consistency is an accessibility feature. When West is always the same hue across decks, people spend attention on the numbers instead of relearning the legend.

Be careful with brand colors as data colors. Brand orange for the company logo is fine in a corner. Brand orange for “bad,” “selected,” and “Enterprise segment” at the same time is a collision. Reserve alert color for alerts. Reserve categorical colors for categories. If brand guidelines fight readability, readability wins for analytical charts. Marketing can keep the poster. Ops needs the truth at a glance.

Palette types you actually need

Palette typeUse whenWorkplace example
QualitativeCategories with no orderRegions, product lines
SequentialLow to high of one measureTicket volume heat by day
DivergingValues around a meaningful midpointVariance vs plan, plus or minus

Common failure: using a rainbow sequential scale for ordinary magnitude. Rainbows create false boundaries and weird emphasis in the yellow band. Prefer a single-hue sequential ramp for volume, and a carefully chosen diverging ramp only when the midpoint is real (zero variance, break-even, 50% share).

Keep categorical colors few. If you need eight categories, you probably need filtering, grouping into “Other,” small multiples, or a table. Color is not a filing system for infinite series.

Labels beat legends

Legends force eye travel: mark, legend, mark, legend. Direct labels put the name next to the line or bar. Titles state the claim. Subtitles carry units and filters. Axis titles name the measure. Together they reduce the “what am I looking at?” tax that kills the first thirty seconds of a meeting.

Label checklist:

  • Title: what happened or what to decide (not “Chart 1”)
  • Subtitle: time window, unit, population filter
  • Axis titles: when the unit is not obvious from the tick labels
  • Direct labels: series names at the end of lines when space allows
  • Value labels: sparingly on bars when exact numbers matter and clutter stays low
  • Footnotes: definition caveats, missing weeks, currency

Annotation is its own habit later in this series. For now, one idea is enough: if a color legend is the only way to name four lines, try labeling the lines instead. Your colorblind colleague and your grayscale PDF will thank you.

Contrast that survives projectors

WCAG 2.1 contrast guidance for text aims at readable contrast ratios (commonly discussed as about 4.5:1 for normal text and 3:1 for large text under Level AA). Chart text is still text. Light gray labels on a cream background may look “minimal” on your laptop and vanish in a conference room.

Contrast habits for charts:

  • Prefer dark text on a light background for labels in print and slides
  • Avoid thin light-gray gridlines that force eyes to strain; keep grids light but present, or remove them if labels already orient the reader
  • Do not place low-contrast white text on yellow bars
  • Test the slide in presentation mode from the back of a room when the decision is expensive

Accessibility is not only compliance language. It is operational reliability: more people understand the number faster, including future you on a phone between meetings.

Patterns, order, and non-color encodings

When categories must stay distinct without hue, use:

  • Line styles (solid, dashed) for two to three series
  • Marker shapes on sparse series
  • Consistent left-to-right or sorted order so position carries identity
  • Small multiples with the same scale instead of one crowded multi-color plot

Patterns on bars can help in print, but dense hatching can look like noise on projectors. Prefer direct labels and fewer series before you invent a texture zoo.

Tool notes without a product tutorial

In spreadsheets, default palettes are often bright and categorical even when your data is sequential. Override them. In Tableau and Power BI, favor colorblind-safe palettes and check the grayscale or colorblind simulation views if your team uses them. In Python, matplotlib and related libraries let you set palettes explicitly and export high-DPI figures so labels stay sharp (see Python for analytics). The tool is not the standard. The standard is: readable without hue, labeled without hunting, honest without theater.

Worked example: from traffic lights to readable status

Ops reviews a weekly service scorecard. The old version uses red/green cell fills only. Here is the underlying table.

QueueSLA met %TargetVs target (pp)Open tickets
Billing97.295+2.240
Onboarding93.195-2.0120
Technical94.895-0.2210
Enterprise98.597+1.525

Old design problems:

  • Status is only red/green fill
  • Onboarding and Technical both look “bad” with no magnitude
  • Open ticket load is invisible, so staffing talk is ungrounded
  • Enterprise green looks like victory even if volume is tiny

Redesign for explain or persuade:

  • Horizontal bars for SLA met %, with a target reference line at each queue’s target
  • Direct labels: queue name, SLA value, and “below target” text where needed
  • A second small bar or label for open tickets so load is visible
  • One accent color for below-target queues, not a full red/green system
  • Title: “Onboarding misses SLA with high open volume; Technical is near target with the largest queue”
# Pseudo styling rules (tool-agnostic)
for row in scorecard:
    label = f"{row.queue}: {row.sla:.1f}% (target {row.target}%)"
    if row.sla < row.target:
        status_text = "below target"
        accent = "highlight"  # one accent, not red/green pair
    else:
        status_text = "on or above target"
        accent = "neutral"
    draw_bar(value=row.sla, label=label, accent=accent)
    annotate(f"{row.open_tickets} open")
# Grayscale test: export without accent colors and re-read labels.

After the redesign, a colorblind viewer and a grayscale printout still see ranking, distance to target, and load. That is accessibility as decision quality. It also connects to foundations: the metric definitions still need to be trustworthy (see data quality and analytics foundations). Pretty accessible charts of the wrong SLA definition remain wrong.

If you want a quick peer review script, ask three questions in Slack with the chart attached:

  1. What is the takeaway in one sentence?
  2. Which series or category is which, without guessing from a legend?
  3. What would you still understand if this were grayscale?

If answers diverge wildly, fix labels and encodings before you debate the business recommendation. Many “data disagreements” are actually decoding disagreements. Accessibility work reduces fake conflict so the room can spend energy on real tradeoffs.

Common mistakes

  • Red/green only status systems with no text or shape backup.
  • Rainbow heatmaps for ordinary sequential data.
  • Legends far from marks with eight near-identical hues.
  • Light gray everything for a “clean” aesthetic that fails in rooms.
  • Encoding two meanings with one color (brand color and alert color).
  • Tiny labels that only the author can read on a laptop.
  • Relying on hover tooltips for names that never appear on the static export.

How to practice this week

  1. Print one dashboard page in grayscale (or desaturate a screenshot). Fix anything that disappears.
  2. Replace one red/green status column with text plus a single accent.
  3. Move series names from a legend onto the chart for one multi-line plot.
  4. Pick a qualitative palette of four colors max for your team and reuse it for a month.
  5. Increase label size one step on your default template. Check a projector if you can.

Browse more paths on Learn. Next in the series: dashboards versus single slides, so color and labels live inside views that do not try to answer every question at once.

Quick recap

  • Do not make color the only encoding.
  • Avoid red/green-only status. Add text, shape, or position.
  • Prefer direct labels over legend marathons.
  • Check contrast for projectors and grayscale.
  • Fewer series and clearer titles beat a clever palette.

Sources