Reference · Chart craft

Chart Craft — data visualization

Load when a chart or exhibit — choosing the type, the chart catalog (bar, line, stacked, scatter, combo, small multiples, waterfall), axes, labels, color, data-ink, native build.

Part of the Consulting Deck skill · loaded on demand from SKILL.md

Choosing and building exhibits that prove the point in under five seconds. Build native (editable) PowerPoint charts, never pasted images. The goal: the chart restates the action title without narration.


Chart type selection (chart-type-selection / chart-chooser)

Message-first decision tree — never "what does the data look like" alone, always "what one sentence should the audience remember, and which encoding proves it fastest."

  1. State the message in one declarative sentence. If you can't, stop — the chart can't be chosen.
  2. Classify into one of six message types: comparison, change over time, composition (incl. bridge), relationship/correlation, distribution.
  3. Map message → encoding:
    • Comparison across categories → horizontal bar, sorted by value (column only when naturally ordered L→R, e.g. time).
    • Change over time → line (continuous/many periods) or column (few periods, emphasis on level).
    • Composition at one point → 100% stacked bar or labelled breakdown; avoid pie beyond ~3 slices.
    • Composition / mix shift over time → 100% stacked columns.
    • Relationship → scatter (third measure as bubble area only if it earns its place).
    • Distribution → histogram / sorted dot plot.
    • Bridge (how a start value became an end value) → waterfall.
  4. "Can the eye decode it" filter: position on a common axis is most accurate, then length, then angle/area. Prefer position and length; treat pie/bubble/treemap as last resorts ("roughly how big," not "exactly how much").
  5. Disqualifiers: >5 lines → small multiples; >7 stacked segments → regroup or sorted bar; two numbers → a sentence or two big numbers beats a chart; one value vs target → a labelled bullet bar, not a gauge.
  6. Confirm the chart restates the title in five seconds.

Output: message restated, message type, recommended chart + reason, two alternatives with trade-offs, any disqualifier resolved, and a note if a chart is even the right format.


The chart catalog

Bar & column (bar-and-column-discipline) — bar (nominal/long-label categories) vs column (ordered/time). Sort by value descending (time keeps chronological). Bars wider than gaps (gap width ~50–80%). Label directly, drop the axis. One color, accent one bar. Roll a long tail into a single "other" bar placed last. Never: 3D, non-zero baseline, stacked-when-comparing-totals, both labels and a value axis.

Line & trend (line-and-trend-charts) — time on the horizontal, even intervals. 2–4 lines max; at 5+ either highlight one/two and gray the rest, or switch to small multiples. Label lines directly at the right end, drop the legend. A line may start above zero when variation is small relative to level (slope carries meaning) — keep it modest; start at zero if absolute level matters. Mark the one inflection (crossover, where growth turned) with a label or vertical reference line. Forecast periods as a dashed continuation, labelled.

100% stacked (hundred-percent-stacked) — for mix / mix shift. Confirm shares, not totals, are the message (the chart hides absolute size). Columns for time, bars for a few named categories. Most important segment at the bottom (only bottom/top sit on a fixed edge and compare accurately); identical segment order across all bars. Cap ~5 segments, bucket the tail into "other" at the top. Label shares on key segments. Print the absolute total above each bar so growth isn't lost.

Stacked vs clustered (stacked-vs-clustered) — decide by which quantity must be compared accurately: totals across categories → stacked; one sub-part across categories → clustered (or its own chart — only the baseline segment in a stack compares accurately); full mix → 100% stacked. Key segment at the baseline; cap ~5 stacked segments; clustered works at 2–3 sub-bars, beyond → small multiples.

Scatter & bubble (scatter-and-bubble-charts) — explanatory measure on x, outcome on y; label both with unit. Round bounds, no cropping, reasonable aspect ratio. For positioning, add reference lines at meaningful thresholds (average/target) → four labelled quadrants; for correlation, a single trend line (no implied causation). Third measure → bubble area (not diameter) with a size-legend bubble; drop it if it doesn't change the conclusion. Label only outliers/focus points (gray the rest). Never connect scatter points with lines.

Combo (combo-charts) — two related series, different encodings (revenue columns + margin-% line). Use only when they share a real story ("revenue grew but margin fell"); else two charts. Absolute/additive measure → columns; rate/ratio/trend → line. Single axis if shared units; secondary axis only for different units — scale it honestly (don't force false alignment), and color each axis to match its series. Two series max.

Small multiples (small-multiples) — compare the same pattern across many (~5+) categories. One frozen chart type/encoding/color per panel; only the data varies. Lock a shared scale across all panels (the whole point — a tall pattern reads genuinely taller); never let PowerPoint auto-scale each panel. Order panels meaningfully; strip axes/legends from each panel and show the scale once. Accent the panels the narrative names. Equal panel size and spacing.

Waterfall / bridge (waterfall-and-bridge-charts / waterfall-bridge-spec) — explains how a value moved. Anchor the start and end bars on zero; each driver floats (built from a stacked column with an invisible base series equal to the running cumulative before each move). Drivers must be MECE and reconcile exactly (start + signed deltas = end); a bridge that doesn't reconcile is worse than no chart — surface any gap as an explicit "other" bar. Order by sign or by narrative (dominant driver). Color by direction (one for up, one for down, neutral for totals), accent the dominant driver. Light gray connector lines link bar to bar. Signed value labels on every bar. State the reconciliation in one line.


Finishing every chart

Action title (chart-to-message-titling / chart-to-message-mapper) — the chart's headline is the takeaway, not the subject. Separate subject ("Revenue by region") from message ("North America drives the majority of revenue"); write a present-tense, falsifiable, single-message sentence; quantify when a number sharpens it; ~6–14 words. The chart needs no separate descriptive title beyond clear axis labels and the highlighted point. Offer the reader one annotation, not five.

Axes & gridlines (axis-and-gridline-discipline) — bar/column value axis starts at zero (length encodes value); lines may start above zero (slope encodes change) when variation would otherwise be invisible, and signal it. Round, human bounds (140 for a max of 132, not 137.4). Round tick intervals (10/25/50/100), 4–6 gridlines. Make gridlines recede (faint gray) or delete them and label directly. Remove a redundant value axis if every point is labelled. Show units once (in the title). Sort category axis by value; avoid rotated labels (switch to horizontal bars). Dual axes only when the two series share a real story.

Labels & number formatting (data-labeling-and-number-formatting) — label directly (bar ends, column tops, line endpoints) over reading off an axis; label what the message needs, not everything. Round to two significant figures unless precision is the point; one rounding rule per chart ("1.2M", not mixing "1.2M" with "980,400"). Units once in the title. Set the format string (#,##0, 0.0%), not static text, so labels update with data. Signs (+/−) on variance/bridge charts. Position to avoid collision; small, quiet label type, bold only the one or two numbers the title leans on.

Color encoding (color-encoding-for-data) — start from one color; add color only to mean something. Use preattentive contrast: gray everything except the one element the message names, give that the accent. Palette by data type — categorical (few distinct hues, reused per category across the deck), sequential (one hue, light→dark), diverging (two hues around a meaningful midpoint). Cap categorical at ~5–6 colors. Tie to the deck brand (primary = base, accent = highlight). Consistent encoding across the deck (region North is blue everywhere). Accessibility: don't rely on red/green alone; pair color with position/labels; check it reads in grayscale (decks get printed).

Data-ink / declutter (data-ink-reducer / declutter-data-ink-review) — maximize the share of ink that encodes data (Tufte). Delete chartjunk (3D, shadows, gradients, heavy borders, background fills, redundant legends). Cut redundant encoding (labelled values make the axis unnecessary; color makes a repeating legend redundant). Reduce color load to one neutral + one accent. Declutter the layout too (boxes around text, decorative dividers/icons). Reduce, don't amputate — keep the reference line, the one annotation, the load-bearing labels; check legibility after stripping. Output three buckets: Delete / Simplify / Re-colour, with the message restated so nothing load-bearing is cut.


Build it native (excel-to-native-chart)

  1. Shape the data first — categories in the first column, one series per column, headers in row one; remove total rows, blanks, merged cells, footnotes from the charting range. Decide units/rounding now.
  2. Native insertion, not paste-as-image — Insert Chart (creates a linked worksheet), or paste from Excel as "Use Destination Theme and Embed Workbook." A picture can't be edited, rebranded, and prints fuzzy.
  3. Embed, not link, so the chart survives travel.
  4. Apply the deck theme — theme colors and slide font, not Excel defaults. This is what makes a chart belong in the deck.
  5. Strip the Excel defaults (title placeholder, legend, gridlines, unneeded axis) and apply the chart skills above.
  6. Verify editability — you can select one bar, recolor it, edit a label. If not, it's an image; redo.
  7. Aggregate large/messy source data (top items + "other", or a summarized series) before charting — plot the summary, not the raw extract.