radar — Lattice component

radar

EvidenceScatterSeries

Native radar / spider chart — items rated across multiple axes.

Open in Playground
Variant

Use to compare 2–4 options across the same 4–8 criteria. Each option becomes a polygon; overlap shows where strengths align.

spiderassessmentpositioning

When to use

  • Same criteria, multiple options. Competitive comparison, vendor evaluation, candidate scoring — anywhere two to four options need to be rated on the same four-to-eight criteria. The polygon shapes show the trade-off pattern at a glance.
  • Shape is the argument. Radar charts are good at 'we are strong here and weak there' — the lopsided polygon is the message. If precise pairwise comparisons matter more than the silhouette, use a grouped bar chart or verdict-grid.
  • Shared zero-to-ten scale. Every axis must use the same scale so the polygons are comparable. Mixed units (ms, $, count) collapse the chart's meaning — normalise to a shared 0–10 or 0–100 before authoring.

When not to use

  • More than four series. Five overlapping polygons become a tangle of edges. Trim to the two or three options the audience is actually choosing between; the rest belong in an appendix table.
  • Three or fewer axes. Three axes makes a triangle — barely a shape. Below four criteria, the spider collapses and the slide should be a cards-grid or verdict-grid instead.
  • Mixed scales across axes. If one axis is 0–10 and another is 0–10,000, the larger axis dominates the polygon and the comparison is misleading. Normalise everything to a shared scale first.

Common mistakes

  • Authoring a detail sublist as a numbered list (1.) instead of -/* bullets. Detail sublists must use -/* bullets — a numbered list isn't recognized as the axis's detail content.
  • Giving a series a different number of values than there are axes. Each series must supply exactly one number per axis, using the SAME axis labels every other series uses — later series align to the first series's axes by label (case-insensitive), falling back to position only when a label doesn't match, so reordering axes across series is safe as long as the labels agree. A genuinely mismatched count or label desyncs which value maps to which spoke.

Authoring

<!-- _class: radar -->

`Scale · 0–10`

## How we stack up across the buying criteria.

- Lattice
  - Performance `9`
  - Pricing `7`
  - Support `8`
  - Ecosystem `6`
  - Security `9`
- Rival North
  - Performance `7`
  - Pricing `8`
  - Support `6`
  - Ecosystem `9`
  - Security `7`
- Rival West
  - Performance `6`
  - Pricing `9`
  - Support `7`
  - Ecosystem `8`
  - Security `8`

Slots

SlotSelectorRequiredDescription
titleh2yesSlide heading framing the comparison.
axesp > codenoOptional eyebrow listing the axes.
seriesul > liyesOne li per series (option). Format: Label — v1, v2, v3, v4, … one number per axis.
detailli > ul > li > ulnoOptional nested sublist under an AXIS in the first series (radar reveals per-axis — the mark is the axis). For the quadrant variant, one level deeper (under each axis within a group). Drives two surfaces from one source (shared with pie/funnel/map/quadrant via the chart-family mark-detail substrate): (1) Present/Practice — the kernel tags the axis label <text> with data-mark and emits the sublist as an inert <template class="chart-detail"> the reveal layer reads; (2) the static PDF — the same detail folds into the slide's speaker note (Axis: item · item) as a Marp-faithful comment that notes-core lifts into the per-slide note channel. The note rides the existing channel, so the chart pixels stay byte-identical. Detail sublists must use -/* bullets, not a numbered (1.) list. A radar with no sublists emits no note and is unchanged.

Anatomy

┌─────────────────────────────────────────┐
│  header                                 │
│           Radar chart heading           │
│                                         │
│                  A                      │
│                 /·\                     │
│              E ●───● B                  │
│                │   │                    │
│              D ●───● C                  │
│  footer                           1/19  │
└─────────────────────────────────────────┘

Variant decision rule

  • default (no modifier)Two to four options compared on the shared polygon — the plain radar.
  • targetActual performance should be measured against an explicit goal shape — draws the target as its own series the actual shape must clear.
  • deltaOnly two periods or options are being compared and the CHANGE between them, not each one individually, is the point — shades the gap.
  • benchmarkOne shape is 'us' and the rest should read as a single reference range, not named individuals — every series after the first collapses into ONE shaded min-max band labeled 'Comparison range' in the legend; competitor names are not shown. Use default/small-multiples instead if each competitor needs to stay individually identifiable.
  • quadrantThe axes themselves fall into natural categories (People/Process/Technology/Risk) worth grouping and shading by compass quarter.
  • small-multiplesMore options need comparing than overlapping polygons could hold without tangling — gives each option its own small radar instead.
  • minimalThe scale rings would distract — strips them, leaving just the shape.

Variants

targettarget

The bar the shape must clear.

<!-- _class: radar target -->

`Scale · 0–100`

## target draws the bar the shape must clear.

- Actual
  - Hiring `72`
  - Runway `88`
  - Pipeline `54`
  - Retention `91`
  - Compliance `66`
  - Velocity `78`
- Target
  - Hiring `90`
  - Runway `85`
  - Pipeline `80`
  - Retention `90`
  - Compliance `95`
  - Velocity `75`

deltadelta

The gap between two shapes, shaded.

<!-- _class: radar delta -->

`Scale · 0–10`

## delta shades the gap between two shapes.

- H1
  - Velocity `5`
  - Quality `6`
  - Morale `4`
  - Coverage `5`
  - Onboarding `3`
- H2
  - Velocity `8`
  - Quality `7`
  - Morale `4`
  - Coverage `6`
  - Onboarding `7`

benchmarkbenchmark

A reference shape overlaid.

<!-- _class: radar benchmark -->

`Scale · 0–10`

## benchmark overlays the reference shape.

- Us
  - Performance `9`
  - Price `6`
  - Support `8`
  - Ecosystem `7`
  - Docs `9`
  - Security `8`
- Competitor A
  - Performance `7`
  - Price `8`
  - Support `6`
  - Ecosystem `9`
  - Docs `5`
  - Security `7`
- Competitor B
  - Performance `6`
  - Price `9`
  - Support `7`
  - Ecosystem `6`
  - Docs `6`
  - Security `6`
- Competitor C
  - Performance `8`
  - Price `5`
  - Support `5`
  - Ecosystem `8`
  - Docs `7`
  - Security `9`

quadrantquadrant

The compass quarters, shaded.

<!-- _class: radar quadrant -->

`Scale · 0–5`

## quadrant shades the compass quarters.

- Our capability
  - People
    - Hiring `4`
    - Retention `3`
    - Bench depth `2`
  - Process
    - Cadence `5`
    - Rigor `4`
  - Technology
    - Platform `4`
    - Tooling `3`
    - Automation `2`
  - Risk
    - Compliance `3`
    - Resilience `4`

small-multiplessmall-multiples

One radar per option.

<!-- _class: radar small-multiples -->

`Scale · 0–10`

## small-multiples deals one radar per option.

- Atlas
  - Adoption `8`
  - Margin `6`
  - NPS `7`
  - Velocity `9`
  - Risk `4`
- Beacon
  - Adoption `5`
  - Margin `9`
  - NPS `6`
  - Velocity `5`
  - Risk `7`
- Cinder
  - Adoption `7`
  - Margin `4`
  - NPS `8`
  - Velocity `6`
  - Risk `5`
- Drift
  - Adoption `6`
  - Margin `7`
  - NPS `5`
  - Velocity `7`
  - Risk `8`

minimalminimal

Rings stripped to the shape.

<!-- _class: radar minimal -->

`Scale · 0–10`

## minimal strips the rings to the shape.

- Lattice
  - Performance `9`
  - Pricing `7`
  - Support `8`
  - Ecosystem `6`
  - Security `9`
- Rival North
  - Performance `7`
  - Pricing `8`
  - Support `6`
  - Ecosystem `9`
  - Security `7`

Related

  • quadranttwo axes are enough — the other six dimensions drop out
  • verdict-gridthe criteria are categorical (pass/fail), not graded
  • kpithe comparison is one option's metrics, not multi-option
  • compare-tablea precise tabular comparison reads better than a shape
  • piechartthe question is part-to-whole, not multi-criterion