Matplotlib
zLanqing/codex-claude-academic-skills
Low-level plotting library for full customization. An agent skill from zLanqing/codex-claude-academic-skills.
Correctness and legibility checklist for publication figures, plus a matplotlib sidecar.
$ npx skills add xuzhougeng/wisp-science --skill figure-style -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install xuzhougeng/wisp-science figure-style --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/xuzhougeng/wisp-science.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/figure-style .claude/skills/figure-style && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "figure-style" agent skill from https://github.com/xuzhougeng/wisp-science/tree/main/skills/figure-style into .claude/skills/figure-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figure-style", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/xuzhougeng/wisp-science/tree/main/skills/figure-styleType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add xuzhougeng/wisp-science --skill figure-style -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install xuzhougeng/wisp-science figure-style --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xuzhougeng/wisp-science.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/figure-style .agents/skills/figure-style && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "figure-style" agent skill from https://github.com/xuzhougeng/wisp-science/tree/main/skills/figure-style into .agents/skills/figure-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figure-style", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add xuzhougeng/wisp-science --skill figure-style -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install xuzhougeng/wisp-science figure-style --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xuzhougeng/wisp-science.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/figure-style .cursor/skills/figure-style && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "figure-style" agent skill from https://github.com/xuzhougeng/wisp-science/tree/main/skills/figure-style into .cursor/skills/figure-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figure-style", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/xuzhougeng/wisp-science.git --path skills/figure-style--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add xuzhougeng/wisp-science --skill figure-style -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install xuzhougeng/wisp-science figure-style --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xuzhougeng/wisp-science.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/figure-style .gemini/skills/figure-style && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "figure-style" agent skill from https://github.com/xuzhougeng/wisp-science/tree/main/skills/figure-style into .gemini/skills/figure-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figure-style", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install xuzhougeng/wisp-science figure-styleInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add xuzhougeng/wisp-science --skill figure-style -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/xuzhougeng/wisp-science.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/figure-style .github/skills/figure-style && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "figure-style" agent skill from https://github.com/xuzhougeng/wisp-science/tree/main/skills/figure-style into .github/skills/figure-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figure-style", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add xuzhougeng/wisp-science --skill figure-style -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install xuzhougeng/wisp-science figure-style --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xuzhougeng/wisp-science.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/figure-style .opencode/skills/figure-style && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "figure-style" agent skill from https://github.com/xuzhougeng/wisp-science/tree/main/skills/figure-style into .opencode/skills/figure-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figure-style", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
figure-styleCorrectness and legibility checklist for publication figures, plus a matplotlib sidecar.
Figure Style is an agent skill from xuzhougeng/wisp-science. Correctness and legibility checklist for publication figures, plus a matplotlib sidecar. Load before plotting anything and call applyfigurestyle() (role-mapped font ladder, outward ticks, frameless legends, 300-dpi saves, CJK-safe fonts). Covers data fidelity, label budgets, axis/colour/type rules, chart choice by data shape, composition, and a mandatory render-then-inspect QA pass (bbox collisions + per-panel visual crops). Helpers: focalpalette, barwithpoints, stripwithmedian, endoflinelabels, panelletter…
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `runtime.py`).
It sits in Data & Analytics, covering Data visualization. It works with Matplotlib. The repository describes itself as: Open-source, local-first desktop AI research workbench for scientific computing with Python/R, MCP bioinformatics tools, SSH/WSL/GPU runtimes, and OpenAI/Anthropic models. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 2ba143b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Python), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Figure Style loads about 3.5k tokens when it runs. Until then it costs about 186 tokens; SKILL.md has 1,861 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from xuzhougeng/wisp-science at commit 2ba143b, republished under its Apache-2.0 licence (© xuzhougeng). 1,861 words, ~3,507 tokens.
.claude/skills/figure-style/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.This skill makes one plot trustworthy and readable. It deliberately has no
house aesthetic — frame, font family, and sizes are all parameters of
apply_figure_style(), which must run before the first plotting call.
Multi-panel assembly is figure-composer's job; deciding what each figure in
a paper should argue is paper-narrative's.
Loading the Python helpers only defines them; it does not select a matplotlib
backend or apply a style. Call apply_figure_style(...) explicitly for plotting.
The optional figure_style_self_check() applies the defaults and checks font
wiring when called; it is not a load-time check.
Two tiers of rule live below. Hard rules — everything under Tell the truth, Never do, and Prove the render, plus any rule stating a perceptual or factual invariant (semantic-zero centring, colour-vision safety, leader-line anchoring) — apply to every plot with no override. Everything else is a default: deviate when you have a deliberate reason, not by accident.
n and the
unit of replication; any small-multiple that fixes a variable names the
fixed value — in-panel, or in the caption when the label budget is tight.The panel shows the pattern; the caption carries the context. Design for a general scientific reader, not for yourself.
ax.margins(0.04) — and no mark or text touches a spine.10²/1k/10k/100k, never raw exponents. Filled bars on
a log value axis are banned outright — bar length would encode the ratio
to an arbitrary floor. Points with a median tick replace them.wspace≤0.06) under one row header.goodness_arrow).focal_palette).
The focal hue may not collide with any categorical palette in the same
figure, and the focal series must stay identifiable even at zero width or
full overlap — outline, marker, or tinted band.apply_figure_style(sizes=(8,7,6))). Panel letters alone break the rule
(bold, larger). A label that doesn't fit gets a layout fix or a shorter
string, never a fourth size.4.2B, 120 kb — not comma
grouping.panel_letter(ax, 'a', case=...)).strip_with_median); large n → box/violin; mean-as-
message → bar with raw points or interval (bar_with_points), not both.
errorbar='ci95' is the t-interval, valid at small n. A missing category
is marked n.d./—/hatched ghost — an empty slot reads as zero — and a
true zero gets a visible stub.end_of_line_labels) rather than a legend box. Per-bin summary glyphs
are unmistakable-for-raw, identical across series, and drawn under the raw
points.paper-narrative runs that review).Each of these is a correctness failure:
Run both checks after fig.savefig(...) and before presenting the file.
1. Collision scan. Assert no visible text box overlaps another or a
spine (a tick label touching its own spine doesn't count), and every text
box sits inside fig.bbox:
rend = fig.canvas.get_renderer()
labels = [(t, t.get_window_extent(rend)) for t in fig.findobj(mpl.text.Text)
if t.get_text().strip() and t.get_visible()]
frames = [(s, s.get_window_extent(rend)) for ax in fig.axes
for s in ax.spines.values() if s.get_visible()]
own_ticks = {ax: set(ax.get_xticklabels(which='both') + ax.get_yticklabels(which='both'))
for ax in fig.axes}
hits = [(a, b) for i, (a, ba) in enumerate(labels)
for b, bb in labels[i+1:] if ba.overlaps(bb)]
hits += [(t, s) for t, bt in labels for s, bs in frames
if bt.overlaps(bs) and t not in own_ticks[s.axes]]
assert not hitsMove, shorten, or stagger until the scan is clean, re-saving each time.
2. Visual pass. Geometry can't see a low-contrast label, crossing
leaders, or two confusable series colours. Crop each panel to its own file
and inspect every crop with Wisp's view_image tool:
fig.savefig("figure.png")
save_panel_crops("figure.png", panel_crops(fig)) # → .cache/figure-style/Leave Python, then view_image each returned path asking: every glyph
legible against its background? smallest element still has a stroke or stub?
leaders uncrossed? any two series colours confusable? legend beside what it
keys? A visual defect that passed the collision scan is still a defect.
Crops are not products. They are throwaway inspection files and never
go in the figures/output directory, not even in a subfolder of it — only
the figure itself is delivered. save_panel_crops keeps them in
.cache/figure-style/ and wipes that directory on every call; if you crop
by hand, write to the same place. Delete it once the figure passes
(shutil.rmtree(".cache/figure-style", ignore_errors=True)), and never
report a crop as an output.
3. R output. Prefer explicit ggsave(filename, plot = p, dpi = 300, bg = "white", ...) over the active device; for base graphics open
png(..., bg = "white", res = 300), draw, and always dev.off(). Then
assert the file exists and is non-empty and inspect it — a "successful" R
call with a missing, zero-byte, or blank file is a failed render.
Defaults when unsure: fewer hues, direct labels over legends, raw data over summaries, and name the measurement before showing its result.
© xuzhougeng, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/figure-style of xuzhougeng/wisp-science.
Open the folder on GitHubat commit 2ba143b
Figure Style next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Figure Style this skillxuzhougeng/wisp-science | 1k | — | ~3.5k | Automated safety check: Pass | Apache-2.0 | |
| MatplotlibzLanqing/codex-claude-academic-skills | 4.7k | 17 repos | ~2.9k | Automated safety check: Pass | MIT | |
| Scientific Visualizationmims-harvard/OptimusKG | 147 | 19 repos | ~6.3k | Automated safety check: Pass | MIT | |
| SeabornzLanqing/codex-claude-academic-skills | 4.7k | 15 repos | ~4.9k | Automated safety check: Pass | BSD-3-Clause | |
| Plot From DataTrae1ounG/paper-plot-skills | 872 | 1 repos | ~583 | Automated safety check: Pass | None | |
| Scientific Figure MakingChenLiu-1996/figures4papers | 8.3k | — | ~557 | Automated safety check: Pass | Custom licence |
zLanqing/codex-claude-academic-skills
Low-level plotting library for full customization. An agent skill from zLanqing/codex-claude-academic-skills.
mims-harvard/OptimusKG
Create publication figures with matplotlib/seaborn/plotly. An agent skill from mims-harvard/OptimusKG.
zLanqing/codex-claude-academic-skills
Statistical visualization with pandas integration. An agent skill from zLanqing/codex-claude-academic-skills.
Trae1ounG/paper-plot-skills
Generate publication-quality matplotlib figures by selecting a pre-built paper style and substituting user data.
ChenLiu-1996/figures4papers
Covers publication-ready matplotlib figures for academic papers, slides, and reports—bars, trends, scatter, heatmaps, and multi-panel layouts—with this…
Trae1ounG/paper-plot-skills
Reproduce any academic paper figure from an uploaded image using accumulated style experience.
xuzhougeng/wisp-science
A skill your agent uses when designing, reviewing, or implementing single-cell RNA-seq QC in Python or R with a human-in-the-loop, data-driven approach.
xuzhougeng/wisp-science
学术审查 / research-integrity screening of a manuscript's figures and reported numbers.
xuzhougeng/wisp-science
将概念、理论或分析方法类图书蒸馏为证据可追溯、经人工门禁审核且不暴露书名、作者、出版社等来源身份的任务型 Skill 候选。用于新建或恢复图书蒸馏、以本地 Tesseract 扫描 DOCX 全部内嵌图像或 Poppler 渲染的扫描 PDF 全页、建立 source map 与 evidence/claim/relation/capability…
xuzhougeng/wisp-science
Create, update, validate, and evaluate Wisp skills. An agent skill from xuzhougeng/wisp-science.
xuzhougeng/wisp-science
Build, audit, authorize, recover, or finalize dynamic Zotero citations and bibliographies in Microsoft Word DOCX files with a protected-source, digest-bound workflow.
xuzhougeng/wisp-science
Set up and validate a reproducible Python or R environment on a Wisp execution context.
Works with
Categories
Correctness and legibility checklist for publication figures, plus a matplotlib sidecar. Figure Style is an agent skill from xuzhougeng/wisp-science. Correctness and legibility checklist for publication figures, plus a matplotlib sidecar.
Figure Style fits situations like: tasks that involve Data visualization.
Run `npx skills add xuzhougeng/wisp-science --skill figure-style -a claude-code`. Or copy the skill folder (skills/figure-style in xuzhougeng/wisp-science) into .claude/skills/figure-style in your project. Claude Code loads it when a task matches its description.
Run `npx skills add xuzhougeng/wisp-science --skill figure-style -a codex`. Or copy the skill folder (skills/figure-style in xuzhougeng/wisp-science) into .agents/skills/figure-style in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add xuzhougeng/wisp-science --skill figure-style -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/figure-style, .gemini/skills/figure-style, .github/skills/figure-style and .opencode/skills/figure-style in your project.
Going by SKILL.md and its folder, Figure Style needs Python for the scripts in its folder. Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Figure Style is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Figure Style: Matplotlib (zLanqing/codex-claude-academic-skills, 4.7k stars), Scientific Visualization (mims-harvard/OptimusKG, 147 stars), Seaborn (zLanqing/codex-claude-academic-skills, 4.7k stars) and Plot From Data (Trae1ounG/paper-plot-skills, 872 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
xuzhougeng (a GitHub user) maintains it in xuzhougeng/wisp-science, which has 1,026 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on October 10, 2026.
Source: xuzhougeng/wisp-science on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.