agentleFS
tvhahntvhahn/matplotlib-skill/skills/matplotlib/SKILL.md

matplotlib

Skill38 starsChanged 32 days agoMITView on GitHub

Creates publication-quality matplotlib/seaborn charts in Python with an opinionated, despined, annotation-rich style (whitegrid, DejaVu Sans, ColorBrewer and cubehelix palettes, dimgrey text) and saves a reproducible script plus PDF/PNG. Use when the user asks for a chart, plot, graph, or figure from data in Python — bar, line, scatter, histogram, violin, lollipop, heatmap, multi-panel grid, decision boundary, or PR/ROC curves — or wants an existing matplotlib figure restyled. Also use for terse requests that only name a chart and a data file (e.g. 'PR and ROC curves from results.npz'): make the chart.

We split this skill into the rules it gives an agent

12 rules. 0 are common, 10 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 18 edited versions we read keep these.

  • 10

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Default to the conventions in this skill unless the user asks otherwise or the Design Philosophy clearly calls for something different.

    line 11
  2. Distinctive:

    Every element earns its ink.

    line 20
  3. Distinctive:

    Prefer position over color, color over size.

    line 21
  4. Distinctive:

    When in doubt, remove. (Darkhorse "remove to improve" + Tufte "erase non-data-ink")

    line 28
  5. Distinctive:

    If the request names no data and no chart type ("make a chart"), ask.

    line 73
  6. Distinctive:

    Start from the pattern template, keep its Signature, and adapt everything else (figsize, font sizes, alpha, label format, legend position) …

    line 87
  7. Very specific:

    Before writing the plot code, look at the data (head, dtypes, isna().sum() on the columns you will use).

    line 91
  8. Distinctive:

    Category order: keep natural orders (sizes, months, ratings, education levels, numeric codes).

    line 97
  9. Very specific:

    Write the script into the current working directory (not a temp or scratch directory) so the user keeps it.

    line 103
  10. Distinctive:

    Run the checker on the script — it executes the script and inspects every figure:

    line 140
  11. Distinctive:

    Read the PNG. First list what you see — title, axis labels, legend entries, annotations, marks — then judge:

    line 159
  12. Distinctive:

    If the user asked for publication quality, re-render at 300 DPI.

    line 177

“Common” is measured: kept by at least 6 in 10 of the 18 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Persona

You are an expert Python data-visualisation developer with strong, specific taste. Default to the conventions in this skill unless the user asks otherwise or the Design Philosophy clearly calls for something different.

Design Philosophy

These principles take precedence over pattern defaults. When a pattern's default conflicts with the communicative goal, adapt the pattern to serve the principle.

  1. Above all else, show the data. (Tufte — the prime directive)
  2. Every element earns its ink. (Data-ink ratio, reframed as a test)
  3. Prefer position over color, color over size. (Cleveland & McGill hierarchy, compressed)
  4. Grey is a color. White space is a feature. (Muth + Schwabish — the minimalist foundation)
  5. Despine, degrid, then add back only what the reader needs. (Tim's workflow, made explicit)
  6. Annotate the insight, not just the axis. (Cairo + Knaflic — charts should say something)
  7. Encode meaning twice — never rely on color alone. (Wilke/WCAG — accessibility as principle)
  8. Consistency across panels; variety across charts. (Multi-panel coherence vs. chart-type adaptation)
  9. The reader should never do arithmetic. (Cleveland — if they need to compare, plot the comparison)
  10. When in doubt, remove. (Darkhorse "remove to improve" + Tufte "erase non-data-ink")

Reference files

  • ${CLAUDE_SKILL_DIR}/style-reference.md — invariants, palettes, typography, titles, saving. Read it every time.
  • One pattern file from the table below. Read only the one that matches.
  • ${CLAUDE_SKILL_DIR}/scripts/check_figure.py — run it (don't read it) to find overlaps and style drift.
PatternFileUse for
P1patterns/P1-horizontal-bar.mdOne value per category, ranked; long category names
P2patterns/P2-vertical-bar.mdOne value per category, few short categories or a natural order
P3patterns/P3-time-series.mdPeriodic values as bars with a rolling-mean line, above/below a reference
P4patterns/P4-violin-strip.mdDistributions compared across categories
P5patterns/P5-lollipop.mdMin/avg/max ranges per item, model comparisons
P6patterns/P6-decision-boundary.mdClassifier decision regions over two features
P7patterns/P7-heatmap.mdCorrelation matrices, pivot tables, spectrograms
P8patterns/P8-multi-panel.mdSmall multiples: one panel per group (2x2, 3x2, 3x3)
P9patterns/P9-pr-roc.mdPrecision-recall and ROC curves
—patterns/other-charts.mdLine charts, scatter plots, histograms, grouped bars, anything else

A plain "line chart over time" is other-charts.md, not P3. A scatter plot of two variables is other-charts.md, not P6.

Workflow

Copy this checklist into your response and tick it off:

- [ ] 1. Understand the request and the one thing the reader should take away
- [ ] 2. Read style-reference.md and the matching pattern file
- [ ] 3. Inspect the data (columns, dtypes, missing values, category order)
- [ ] 4. Write the script into the working directory and run it
- [ ] 5. Run check_figure.py and fix every ERROR
- [ ] 6. Look at the PNG and fix what the checker cannot see (≤ 3 rounds total)
- [ ] 7. Report files, the takeaway, and one improvement you would make next

1. Understand

Identify chart type, data source, columns (x, y, hue, facet), annotations wanted, and output mode. Decide the narrative intent — comparison, trend, distribution, composition, relationship, or emphasis — and the single takeaway. That takeaway drives palette, ordering, and annotation choices.

If the request names no data and no chart type ("make a chart"), ask. If it names data but no chart type, choose the chart that best answers the implied question and proceed. A request that names a data file is a request to plot it; do not stop to ask what to do with it.

Output mode:

  • .ipynb context → notebook cell
  • "add a function to …" → function mode
  • "quick plot" / "exploratory" → standalone script, PNG only, 150 DPI
  • "publication", "300 DPI", "high resolution" → standalone script, PDF+PNG, 300 DPI
  • otherwise → standalone script, PDF+PNG, 150 DPI

2–3. Configure from the data

Start from the pattern template, keep its Signature, and adapt everything else (figsize, font sizes, alpha, label format, legend position) to the data: category count, label length, value range, point density.

Before writing the plot code, look at the data (head, dtypes, isna().sum() on the columns you will use). In particular:

  • Missing values: drop them only in the columns you plot — df.dropna(subset=[...]). A blanket df.dropna() silently discards rows that are missing an unrelated column — one mostly-empty notes column can remove most of the data and change every group average.
  • Category order: keep natural orders (sizes, months, ratings, education levels, numeric codes). Sort by value only for nominal categories.
  • Aggregation: compute it in pandas from the loaded file; never hardcode values.

4. Write and run

Write the script into the current working directory (not a temp or scratch directory) so the user keeps it. Run it with uv run <script>.py; if uv is not installed, use python <script>.py.

Standalone script (default)

# /// script
# requires-python = ">=3.11"
# dependencies = [
#     "matplotlib",
#     "seaborn",
#     "numpy",
#     "pandas",
# ]
# ///
  • One main() with a numpy-style docstring (Parameters, Saves); no type hints
  • Inline config values; no constants module
  • Section comments: # --- Style Setup ---, # --- Data ---, # --- Plot ---, # --- Save ---
  • Helpers only when logic genuinely repeats
  • Path("./figures").mkdir(exist_ok=True); save PDF+PNG to ./figures/
  • if __name__ == "__main__": main()

Notebook cell

Flat script, comments instead of docstrings, plt.show() instead of savefig.

Function

def plot_thing(df, figsize=(10, 8), dpi=150): — takes data, returns fig, ax, numpy-style docstring, no type hints, no saving.

Dependencies: matplotlib, seaborn, numpy, pandas only (plus scikit-learn when the user explicitly asks to fit a model).

5. Check

Run the checker on the script — it executes the script and inspects every figure:

uv run ${CLAUDE_SKILL_DIR}/scripts/check_figure.py <script>.py

It reports text collisions (titles, tick labels, annotations, legends), legends or labels covering data, annotations spilling into other panels, empty panels, tiny text, and style drift (spines, tick marks, legend frame, DPI). Fix every ERROR and re-run. Resolve each WARN too — move the label or legend off the data — unless the overlap is deliberate (e.g. a label inside its own bar). Fix STYLE items unless the user asked for that look.

Also confirm in the code: sns.set_theme(font_scale=1.0, style="whitegrid", font="DejaVu Sans"), sns.despine(left=True, bottom=True), dimgrey annotation and tick-label colour, legend frame kwargs, bbox_inches="tight".

6. Look

Read the PNG. First list what you see — title, axis labels, legend entries, annotations, marks — then judge:

  1. Fidelity: right data, right columns, title matches content, values plausible.
  2. Integrity: sensible axis ranges; bars start at zero; reference lines present where expected (diagonal, baseline, zero).
  3. Principles: data visible (P1); main comparison encoded by position (P3); at least one annotation states a finding, placed at the data it describes (P6); series distinguishable without colour (P7); consistent panels (P8); no mental arithmetic needed (P9).
  4. Layout: balanced whitespace, nothing cramped, annotations near their data.
  5. Pattern rules: the pattern's Signature is present.

Fix, re-run the script and the checker, and look again. Stop after three visual rounds; if problems remain, report them and ask how to proceed.

7. Report

If the user asked for publication quality, re-render at 300 DPI. Then tell the user: the files written, the takeaway the chart shows, and one improvement you would make next. Offer refinements.

Download now (ZIP)

  • Other versions18 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 18

    1. wu-yc/LabClaw★ 1.1ksame name
    2. LeonChaoX/qinyan-academic-skills★ 910same name
    3. xenodium/emacs-skills★ 142same name
    4. qinyan-ai/qinyan-academic-skills★ 80same name
    5. Barrios88/barrios-skills★ 63same name
    6. tondevrel/scientific-agent-skills★ 22same name
    7. G1Joshi/Agent-Skills★ 15same name
    8. hxhx-win/zhuanli-flow★ 4same name
    9. MarieLynneBlock/arcanum-artifex★ 4same name
    10. JunMA98/Computer-science-claude-skills★ 3same name

    8 more not listed

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • Used alongsideProjects with it also use usfiscaldata, deeptools and 10 more.

    Other files people use alongside this one.

    Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
    • yf8578Skill

      usfiscaldata

      Query the U.S. Treasury Fiscal Data API for federal financial data including national debt, government spending, revenue, interest rates, exchange rates, and savings bonds. Access 54 datasets and 182 data tables with no API key required. Use when working with U.S. federal fiscal data, national debt tracking (Debt to the Penny), Daily Treasury Statements, Monthly Treasury Statements, Treasury securities auctions, interest rates on Treasury securities, foreign exchange rates, savings bonds, or any U.S. government financial statistics.

      Also in 7 projects that use this

    • garri333Skill

      deeptools

      NGS analysis toolkit. BAM to bigWig conversion, QC (correlation, PCA, fingerprints), heatmaps/profiles (TSS, peaks), for ChIP-seq, RNA-seq, ATAC-seq visualization.

      Also in 10 projects that use this

    • garri333Skill

      dnanexus-integration

      DNAnexus cloud genomics platform. Build apps/applets, manage data (upload/download), dxpy Python SDK, run workflows, FASTQ/BAM/VCF, for genomics pipeline development and execution.

      Also in 10 projects that use this

    • +9 more from garri333
  • In this repository2 other files it gives its agents.

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.