Matplotlib Figures logo

Matplotlib Figures

CommunityPopular
Muuuun
matplotlib-figures

Publication-quality data plots via matplotlib with venue-specific styles. Use for generating your own figures (timelines, comparison charts, data summaries, heatmaps) that you add to the LaTeX report. Your brain prompt supplies the venue-specific style directory as {{VENUE_SPECIFIC_DIR}} — use that value wherever this skill writes `<VENUE_SPECIFIC_DIR>`.

Overview

PublisherMuuuun
Repositoryluxas
Skill namematplotlib-figures
Stars
1.2K
Forks
18
Bundled files
11
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 11 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by Muuuun on GitHub. Read the source before you install it.

Installation

Install the Matplotlib Figures AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/Muuuun/luxas/tree/main/skills/matplotlib-figures
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/Muuuun/luxas.git /tmp/luxas
mkdir -p .claude/skills
cp -r /tmp/luxas/skills/matplotlib-figures .claude/skills/matplotlib-figures
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Matplotlib Figures in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Matplotlib Figures on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Matplotlib Figures is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Matplotlib Figures Skill

Step 0 — data figures go through figspec (mandatory for agents)

python3 <luxas_root>/skills/matplotlib-figures/scripts/figspec <name>.figspec.json renders a declarative spec (series as CSV references, one highlight, reference lines, bands) through a fixed template that owns style, marker policy, occupancy-aware label placement and legends. Grammar: references/figspec_schema.md. The grammar is strict (figures v4, 2026-09-05): an unknown key is an error naming the key to use; exit 2 means the figure is not done (a label that could not be placed, more than five series, a page-tall layout) and compile_latex reads the same findings from <pdf>.figlint.json. Energy-level diagrams go through skills/figure/scripts/levelspec (grammar skills/figure/references/levelspec_schema.md). The archetype/figlint workflow below remains for figure classes the spec cannot express (dot matrices, comparison planes); a plain y(x) figure written in raw matplotlib by an agent is a defect.

All generated figures MUST be publication-quality: load a venue-matched style, save as vector PDF, use colorblind-safe palettes.

3-step workflow

Step 1 — Set up the figure style (once per project)

When you have determined the target venue, copy BOTH the matching matplotlib style template AND the domain style guide to your project (half-upgrading only the mplstyle recreates the figstyle/guide palette divergence). Your brain prompt supplies the venue-specific directory as {{VENUE_SPECIFIC_DIR}}:

bash
cp {{VENUE_SPECIFIC_DIR}}figstyles/<style>.mplstyle report/figstyle.mplstyle
cp <luxas_root>/skills/figure/style_guides/<domain>.md report/figures/style_guide.md

Style map:

VenueStyle fileNotes
Physics (PRL, PRX, APS journals)physics-aps.mplstyleCM fonts, LaTeX, 600 DPI
CS conferences (NeurIPS, ICML, ICLR)cs-conferences.mplstylesans-serif, 300 DPI
Nature / Science / Cell / PNASnature-science.mplstyleArial, compact, 300 DPI
Chemistry (JACS, ACS journals)chemistry-acs.mplstyleArial, 300 DPI

Step 2 — Use the style in all plotting code

python
import matplotlib.pyplot as plt
plt.style.use('report/figstyle.mplstyle')

Step 3 — Save as PDF (vector), not PNG

python
fig.savefig('report/figures/fig_name.pdf')

Archetype-first workflow (mandatory)

Do NOT write a figure from scratch. references/ holds polished archetypes — each embodies the design language (references/DESIGN.md) and passes figlint:

archetypeuse it for
archetype_comparison.pycross-study/scheme rankings; any "who is best and why" (log dot plot + two-quantity plane with iso-product lines)
archetype_scan.pyany y(x) parameter scan: shaded regimes, direct-labelled lines, annotated crossing
archetype_matrix.pysparse categorical counts: dot matrix, zeros white, sorted by totals

Copy the nearest one, keep every design rule (the comments say which line is a rule), replace the data. This is the same exemplar discipline as the survey outline (skills/review/references/exemplar_survey_outline.md): imitate the skeleton, do not re-derive the shape — re-derivation is how the shipped 660×-on-linear and dark-heatmap failures happened.

figlint — run every plot script through it (mandatory)

Never run a plot script bare. Run it through the mechanical linter that ships with this skill:

bash
python3 <luxas_root>/skills/matplotlib-figures/scripts/figlint <your_plot_script.py>

It executes the script with savefig patched and reports, per saved figure:

  • ERROR: text collision — two labels overlap. Fix positions; a colliding label ships unreadable. (Production audit 2026-08-24: one schematic shipped with FOUR collisions.)
  • ERROR: clipped — a label extends past the canvas. Enlarge the canvas or move the label; bbox_inches="tight" also resolves it.
  • WARN: wide linear axis — positive data spanning >50× on a linear axis. Small values render invisible; a shipped FOM chart put 1.27 ns next to 840 ns on linear and four of five bars vanished — the report's central comparison. Switch to log, or write one comment line in the script saying why linear is right.

Every ERROR must be fixed before the figure is used. Exit 2 = errors; do not || true it.

Chart-form rules (from shipped failures, not taste)

  • One axis, one unit. Never put quantities with different units on a shared axis labelled "Value" — a bar in ns next to a bar in ×10⁻³ compares nothing.
  • Range ratio > 50× ⇒ log scale or broken axis. See the WARN above.
  • Sparse count matrices are not heatmaps. A mostly-zero integer matrix rendered as a dark heatmap is 90% ink for 0. Use a dot matrix or a table; give zeros a light neutral, not the colormap floor; and never let a colorbar tick at 0.5 for integer counts.
  • Do not double-encode. If every cell prints its number, the colormap adds nothing but darkness — pick one encoding, or use color only to group.
  • Annotations must not touch. If two annotations fight for a spot, move one with a leader line — figlint enforces this mechanically.

Rules

  • Never use the default matplotlib style — always load figstyle.mplstyle.
  • Format: PDF (vector) for line plots and diagrams; PNG only for raster data (heatmaps, images).
  • Width: single-column for most figures; override figsize for double-column only when the figure genuinely needs it.
  • Colors: the palette comes from the style file's axes.prop_cycle, pre-aligned to skills/figure/style_guides/<domain>.md — don't override it. Red/green adjacent series: differentiate by marker/linestyle too.
  • Tables: render tabular data with LaTeX \begin{tabular}, NOT as matplotlib table images.
  • Fallback: if text.usetex fails (LaTeX not installed), set text.usetex=False in the style file.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Matplotlib Figures AI skill do?

Publication-quality data plots via matplotlib with venue-specific styles. Use for generating your own figures (timelines, comparison charts, data summaries, heatmaps) that you add to the LaTeX report. Your brain prompt supplies the venue-specific style directory as {{VENUE_SPECIFIC_DIR}} — use that value wherever this skill writes `<VENUE_SPECIFIC_DIR>`.

Why use Matplotlib Figures on TypingMind?

Because you install it once and use it with any model. Matplotlib Figures is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Matplotlib Figures in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Muuuun/luxas/tree/main/skills/matplotlib-figures. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Matplotlib Figures?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Matplotlib Figures?

As many as you like. As long as a model supports skills, you can use Matplotlib Figures with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Matplotlib Figures AI skill free?

Yes. It is published on GitHub by Muuuun under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇