Skip to content
Content
Skill

/nice-figures

Generate matplotlib figures in the soft-pastel + warm-earth visual register used by AI alignment research blogs (Anthropic-style) — bold sans-serif display titles, scatter overlaid with smoothed trends and shaded confidence bands, minimal axes, '↓better' badges, warm

From plugin
nice-figures
101 skill
Install
$ npx -y skills add Mapika/nice-figures --skill nice-figures --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/nice-figures

Context preview

The summary Claude sees to decide when to auto-load this skill.

Generate matplotlib figures in the soft-pastel + warm-earth visual register used by AI alignment research blogs (Anthropic-style) — bold sans-serif display titles, scatter overlaid with smoothed trends and shaded confidence bands, minimal axes, '↓better' badges, warm

SKILL.md

nice-figures.SKILL.md
name: nice-figures
description: "Generate matplotlib figures in the soft-pastel + warm-earth visual register used by AI alignment research blogs (Anthropic-style) — bold sans-serif display titles, scatter overlaid with smoothed trends and shaded confidence bands, minimal axes, '↓better' badges, warm coral/peach/sage/blue palettes, white background by default. Use this skill whenever the user asks for plots in an Anthropic-style, alignment-research style, soft-pastel style, research-blog style, or conference-poster style. Trigger especially for training-curve plots over RL steps, agentic misalignment bar charts, eval comparisons, scatter plots with error bars and baseline bands, or any figure the user wants to feel more 'research-blog' than 'Nature column.' Also trigger when the user references a previous figure built in this style or asks for conference-ready figures with a clean white background."

Soft Research Figures

A matplotlib visual register for AI research figures — alignment plots, training curves, eval bar charts, scaling scatter plots. Bold sans-serif titles, soft pastel + warm earth palettes, smoothed trends with shaded bands, minimal axes. Conference-ready (white background) by default.

Use this skill for posters, slide decks, full-page appendix figures, blog posts, and conferences that lean toward modern ML aesthetics (NeurIPS, ICML, ICLR talks/posters). It favors a relaxed, presentation-friendly look rather than the tight single-column widths of a strict print journal — but the white-background default is clean enough for most paper figures too.

First steps

1. Copy `scripts/soft_style.py` to the working directory. 2. Read `references/chart_recipes.md` and pick the archetype closest to what the user described. 3. Plan: how many panels, what data, what colors, which "better" direction. 4. Write the script using the recipe; adapt only what's necessary. 5. Export both PDF and PNG via `save_figure()`. 6. **Read the exported PNG and look at it.** This step is mandatory — see "Inspect before delivering" below. Fix and re-render until clean.

The register is designed around the Inter font. Check availability once per session — if it's missing, figures silently fall back to DejaVu Sans and look noticeably different:

from matplotlib import font_manager
has_inter = any(f.name == "Inter" for f in font_manager.fontManager.ttflist)

If absent, tell the user once (install via the OS package `fonts-inter` or from https://rsms.me/inter/, then delete matplotlib's font cache) and continue with the fallback — don't block on it.

When to use this skill

Trigger on phrases like:

  • "alignment plot," "training curve," "eval comparison"
  • "Anthropic-style figure," "research-blog style," "soft pastel"
  • "conference figure," "poster figure," "talk slide chart"
  • "make me a [bar chart / ROC / heatmap / box plot / parity plot / scaling law / distribution] in our soft style"
  • "match the figures I showed you" (when reference images are present)
  • "make it pretty for the appendix"

Don't trigger on:

  • Pure data exploration (Jupyter scratch plots) — overkill
  • Schematics, diagrams, flowcharts — wrong tool entirely

The sixteen archetypes

**Anthropic-blog originals (1–5):** the soft-pastel research-figure register, smoothing bands, rounded bars.

| # | Recipe | Use for | |---|--------|---------| | 1 | Multi-panel trend with band | Training curves, multi-benchmark comparison | | 2 | Scatter with error bars + baseline | Scaling plots, ablation comparisons | | 3 | Grouped bars + error bars (multi-condition) | Model comparison across metrics | | 4 | Grouped bars (3 conditions × N scenarios) | Intervention comparison | | 5 | Multi-line with markers | Single-parameter sweeps |

**Standard publication (6–11):** ROC, heatmaps, distributions, etc.

| # | Recipe | Use for | |---|--------|---------| | 6 | Heatmap / confusion matrix | Similarity matrices, attention, ablation grids | | 7 | ROC / PR curve | Classification diagnostics | | 8 | Distribution comparison (hist + KDE) | Property distributions, score shifts | | 9 | Box / violin plot | Seed stability, dataset comparison | | 10 | Scaling-law plot | Per-run loss curves + compute-efficient frontier (Kaplan/Chinchilla style) | | 11 | Parity / calibration plot | Predicted vs. actual, regression diagnostics |

**Domain-specific (12–16):** embedding scatter, ECDFs, forest plots, horizontal rankings, Pareto trade-offs.

| # | Recipe | Use for | |---|--------|---------| | 12 | 2D embedding scatter | t-SNE / UMAP / PCA visualizations | | 13 | ECDF / CDF plot | Distribution comparison without binning, tail behavior | | 14 | Forest plot / dot-and-whisker | Effect sizes with CIs across many interventions | | 15 | Horizontal bar chart (sorted) | Many-method comparisons (>8 categories) | | 16 | Pareto front / trade-off plot | Accuracy-vs-cost, quality-vs-latency trade-offs |

Full code for each lives in `references/chart_recipes.md`. Copy the nearest one and adapt.

Style at a glance

from soft_style import (
    configure_style, figure_title, panel_subtitle, better_badge,
    top_legend, plain_log_ticks, soft_colorbar,
    smooth_curve, rolling_band, rounded_bars, rounded_hbars, save_figure,
    LINE_PALETTE, BAR_PALETTE, MULTILINE_PALETTE, NEUTRAL,
    CMAP_SEQUENTIAL, CMAP_DIVERGING, CMAP_GRADIENT,
)

configure_style()           # white background (default, conference-ready)
# configure_style(cream_bg=True)  # original warm cream blog background
# configure_style(scale=0.75)     # single-column paper figure (see below)

Small layout helpers — prefer these over hand-rolled equivalents:

  • `top_legend(ax_or_fig, handles, ncols=...)` — horizontal frameless

legend above the plotting area; pass a Figure for one shared legend over multiple panels. Raise the title to clear it (`y≈1.06` single axes, `y≈1.14–1.18` figure-level).

  • `plain_log_ticks(ax, [2, 3, 4, 6, 9])` — plain-number labels on a log

axis that sp

Read more
Ships withnice-figures

A scientific & blog plotting library built for AI agents. It teaches an agent to generate matplotlib figures in a soft-pastel, research-blog visual register — the kind of plot you see in modern ML/alignment write-ups.

Get the whole plugin
Stats
10
Stars
1
Forks
Maintained
Maintenance
Python
Language
MIT
License
3mo ago
Last commit
3mo ago
Created

Repo: Mapika/nice-figures