Skip to content

The UMAP category palette is ungated and fails the floor the network palette is held to #601

Description

@realmarcin

Found working #199, whose "Addressed" list records the UMAP page's palette as "CVD-safe 8 + grey Other" (#198). Measured with the repo's own colour code — tests/test_network_palette.py's Viénot–Brettel–Mollon projection and CIE76 distances — it is not.

The numbers

normal   min= 22.0   pairs below 15: 0
protan   min=  6.9   pairs below 15: 4
      6.9  LIGNOCELLULOSE / METHANOGENESIS
      9.4  LIGNOCELLULOSE / CARBON_SEQUESTRATION
     14.0  BIOTECHNOLOGY  / CARBON_SEQUESTRATION
     14.6  METHANOGENESIS / CARBON_SEQUESTRATION
deutan   min= 10.4   pairs below 15: 3
     10.4  BIOTECHNOLOGY  / _other
     11.7  METHANOGENESIS / CARBON_SEQUESTRATION
     13.7  BIOTECHNOLOGY  / PHYTOPLANKTON
tritan   min=  5.8   pairs below 15: 3

The network palette is gated at ΔE ≥ 15 for normal, protan and deutan (MIN_SEPARATION), with tritan tracked separately. The UMAP palette sits at 6.9 under protan and is gated by nothing at all.

Why this is the interesting part

This is the same defect shape as #588, and as the _KNOWN_BROKEN/ENUMS cases before it: a rule that was applied to one artefact and not to its sibling. tests/test_network_palette.py exists precisely because a hand-picked palette had drifted into indistinguishable colours — and the page next door has a hand-picked palette that no test reads.

It also means #199's checklist is not quite true. "CVD-safe 8" was asserted, not computed; the one thing the dataviz rubric says never to eyeball is exactly this.

Mitigating, but not excusing

The UMAP page pairs colour with d3.symbol shapes, so identity is not carried by colour alone. The rubric permits ΔE 6–8 only with secondary encoding, which is satisfied — so this is "at the floor with a redundant channel", not "broken". LIGNOCELLULOSE/METHANOGENESIS at 6.9 is nonetheless the weakest pair in either palette, and BIOTECHNOLOGY/_other at 10.4 under deutan is a category colliding with the collapsed bucket, which is worse than it sounds: those are meant to be visually distinct classes of thing.

Proposed

  1. Generalise test_network_palette.py so both palettes are held to one standard rather than one being gated and the other trusted — the module already has all the colour maths.
  2. Re-step the failing pairs. An 8-colour set clearing ≥15 on normal/protan/deutan is achievable; the network palette does it with 7 while also clearing tritan.
  3. Then tick Web design review: dataviz/artifact-design findings #199's "CVD-safe" line as computed rather than asserted.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions