Model or dataset
TingxiYu/academic-figure-skill avatar
TingxiYu/academic-figure-skill

academic-figure-skill and its refusal to start from a template

A skill for academic research figure generation that autonomously handles the full workflow — data understanding, chart type recommendation, and format-compliant generation.

491 stars26 forksPythonApache-2.0

At a glance

What is it?
A Skill package for AI coding assistants that generates journal-format scientific figures, built on one rule: pick the chart from the scientific question rather than from a template gallery. Around that sits a copy-first asset library, a four-pass QA protocol, and print constraints fixed at creation time.
Who is it for?
It fits a researcher who already knows what question the data answers and wants the panel layout, typography and export settings imposed rather than rediscovered, and who is willing to accept a workflow that asks for confirmation before rendering. It does not fit someone who wants a chart in two minutes, since the eight-step loop includes environment probing, data gating and four QA passes.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 92 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 12, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The chart is chosen from the question, not the gallery

The stated core principle is question-driven rather than template-driven, and everything else follows from refusing to start from a picture. Each figure begins with a scientific question, and the visual form is derived from it, rather than the user picking a chart type and finding data to fill it. The workflow is described as an eight-step closed loop: user intent parsing, prototype classification, chart type argumentation, environment probing, style injection, asset retrieval, render generation, and quality validation. Each run is supposed to end with three artifacts rather than one, namely a vector PDF as the main file, a 300dpi PNG preview, and a statistics report. The positioning is also explicit about what the skill is not. It does not replace the plotting ability of Python or R; it supplies structured constraints and prior knowledge so the assistant's generated code follows the visual standards of the Nature, Cell and Science family of journals, which cuts down the manual work of adjusting layout, colour and export parameters afterwards. The knowledge itself is packaged in SKILL.md plus sixteen reference documents, which together hold the journal specifications and the visual parameters for the 29 chart types. Keeping that in references rather than in the main file is what lets a single skill file stay readable while the per-chart detail grows, and it is also why the install instructions insist on copying whole directories.

The loop opens by asking what the data has to answer

The step diagram is where the principle becomes concrete, and the first step is a question rather than an action. Step minus one is requirement clarification, described as anchoring the analysis goal by asking in reverse what question this data is meant to answer. Step zero-a classifies the figure into one of four paradigms: a quantitative grid, a schematic-led layout, an image plate combined with quantitative content, or an asymmetric composite, and that classification is what drives the layout and the hero panel strategy later. Step zero-b is data parsing, explicitly question-driven and explicitly refusing templated application of a known chart. Step one is chart argumentation on an evidence basis, with the rule that N panels correspond to N independent scientific questions, and the user confirms the panel plan at this point rather than after the work is done. Only then does the loop reach environment probing, style injection, asset retrieval, rendering, and finally a data validation step numbered five and a half. The middle steps are unglamorous and that is the point. Environment probing is a runtime self-check of the Python and R kernels and of dependency completeness, so a missing interpreter surfaces before any figure code is written. Style injection fixes the visual baseline as a font system, a colour scheme and an export specification, which means the same figure produced twice looks the same. Asset retrieval scans assets/figures/<type>/ per panel rather than once for the whole figure, so a five-panel composition can mix matched and inherited panels.

Copy-First means running the script that already exists

The asset strategy is the most unusual thing about the package, and it is a rule rather than a suggestion. Before any chart code is written, the skill scans assets/figures/<type>/ for a production script matching the panel at hand. If one matches, it is run natively: a Python script runs under Python, an R script runs under R, and the documentation is emphatic that there is no translation and no downgrade in quality. The reasoning is straightforward once stated, since translating a working script into another language is exactly where visual regressions get introduced, so the rule keeps the reference implementation authoritative. When nothing matches, the fallback is cross-type parameter inheritance from a similar figure type, and the parameters are sorted into three classes. Class A holds hard parameters such as colour, opacity and line width. Class B holds proportional parameters such as font size and dimensions. Class C holds logical parameters such as whether the legend and grid are shown.

A data gate can stop the render before the QA passes

Quality control is layered, and the first layer can refuse to draw anything. A per-panel data validation gate runs before rendering, and the documented thresholds are concrete: a volcano plot needs at least ten significantly differential genes, AUROC curve separation needs at least 0.15, and a heatmap must show variance across rows. Failing a check means the figure is not rendered, which is a stronger stance than warning about it afterwards. After that come the four QA passes. Pass zero scans for anti-patterns under the AP-0-7 group, pass one checks code-level compliance under CL-1-7, pass two checks visual logic and data integrity under VI-1-6, and pass three validates the rendered output under VV-1-5, for more than thirty checks in total. There is also a reviewer simulation mode that looks at the finished figure across five dimensions, scientific clarity, visual hierarchy, colour accessibility, typographic readability and overall completeness, and grades each observation as a must-fix or a suggestion. Alongside the passes, every figure is required to carry a statistics and reproducibility report, and the required fields are enumerated rather than left to taste: the definition of n, the central statistic used such as a mean or a median, the measure of spread such as a standard deviation, a standard error or a 95 percent confidence interval, the name of the test, the multiple comparison correction applied, and a source-data provenance trail.

Print constraints are fixed at creation, never scaled later

The journal specifications are encoded rather than suggested. Typography is Arial or Helvetica, and column widths are fixed at 89mm for a single column and 183mm for a double column, with the rule that the size is set when the figure is created and never scaled afterwards. Scaling is what turns correct text into unreadable text, so removing that option is the point. Export follows a vector-first rule: line, scatter and bar charts go to PDF or SVG, and only genuinely raster content such as heatmap tiles or microscopy images use TIFF or PNG at 300dpi or above. Colour is deliberately restricted, with two to four semantic primary colours plus one accent, and the default palettes of matplotlib and ggplot are explicitly forbidden. A journal colour system sits on top of that, with Nature described as cooler blue, Cell as warmer and Science as a conservative grey, colourblind friendly and avoiding red and green as a standalone distinguishing pair. The supporting rule is that one figure carries one core message a reviewer can grasp in a three-second scan, which is why gridlines, borders and useless legends get removed.

Mixed Python and R panels are stitched by physical size

Multi-panel figures are where a two-language skill has to make a decision, and the one documented here is to render R panels as bitmaps and let Python assemble. An R panel runs natively and is rendered through the Cairo device to produce a spec-correct PNG, and a Python layout engine called compose.py then merges the panels according to their physical dimensions. In other words the composition happens at the layout stage rather than in either plotting language, which is what lets an R figure and a Python figure share one page without either being reimplemented. The same assembly step carries a second idea, hero panel auto-recognition: the panel that carries the core conclusion is given greater visual weight while supporting panels are arranged around it. That is the visual expression of the rule that N panels mean N independent questions, since a panel set that answers one question should not compete with itself.

Four install paths, and one rule about not copying SKILL.md alone

The package is a directory, not a single file, and the documentation is explicit that a partial copy breaks it, because the skill depends on references, scripts, assets and install directories to do visual baseline injection, asset retrieval and cross-platform adaptation. For Claude Code the path is an npm install of the CLI, then a clone into a stable directory and a copy into the skills folder:

bash
mkdir -p ~/ai-skills
cd ~/ai-skills
git clone https://github.com/TingxiYu/academic-figure-skill.git
cp -r academic-figure-skill ~/.claude/skills/

Updates repeat the pattern, with a git pull in the clone followed by copying the tree into the skills folder again. Codex loads the skill through a manifest.yaml and instructions.md pair under install/codex, and the copy enumerates exactly what must travel:

bash
git clone https://github.com/TingxiYu/academic-figure-skill.git
cd academic-figure-skill
mkdir -p ~/.codex/skills/academic-figure-skill
cp -r SKILL.md references/ scripts/ assets/ install/codex/* ~/.codex/skills/academic-figure-skill/

The other two assistants take a rules file instead of a package. Cursor gets install/cursor/.cursorrules copied into the project root, and that file holds the colour scheme, typography baseline and export specifications. GitHub Copilot gets install/copilot/copilot-instructions.md copied into the project's .github directory, with a note to append to an existing instructions file rather than overwrite it. Once installed there is no command to memorise, since the skill triggers from a described need. The documentation's own examples are two plain sentences, one asking for a CSV in the project to be analysed and visualised, and one asking for a CSV to be drawn as a Nature-style differential expression volcano plot, which is the whole invocation surface. Codex gets a third route as well, a prompt telling it to install the skill from the repository URL with an explicit instruction to preserve the full directory structure and not copy only SKILL.md.

29 chart types are claimed, and fewer are shown

The capability list names 29 chart types, each with production scripts in both Python and R plus a preview PNG, and the list runs from heatmaps, volcano plots and bar charts through PCA, RDA, radar, Sankey, AUROC curves, ridge and violin plots, Mantel correlation, UpSet, forest plots, confusion matrices and manifold plots to correlation matrices and grouped variants. The published atlas table is narrower than that claim. It shows a subset with three columns per row, the figure name, its graphic features and a typical application scenario, with the preview images themselves empty in the visible document. The atlas also carries a caveat that matters for expectations: the example figures are generated from the project's private data assets and are offered as style references only, with the promise that a request for the same type of figure is rebuilt against your actual data while preserving the visual language the example established. The root is small and honest about the shape of the project, holding LICENSE, the Chinese and English READMEs, SKILL.md, and the assets, install, references and scripts directories, with Python as the primary language, Apache-2.0 licensing in a single file, no releases, and a last push on 2026-07-12. Two more things about how the project presents itself. It ships a Chinese README alongside an English one, and the longer background sits with a WeChat account rather than in the repository, with the README pointing readers there for further details. The atlas is linked from the header as its own destination, separate from the chart type overview, which suggests the maintainers treat the example gallery as a living asset updated over time rather than a fixed illustration.

Editorial conclusion

It fits a researcher who already knows what question the data answers and wants the panel layout, typography and export settings imposed rather than rediscovered, and who is willing to accept a workflow that asks for confirmation before rendering. It does not fit someone who wants a chart in two minutes, since the eight-step loop includes environment probing, data gating and four QA passes. Before you rely on it, check two claims yourself: the capability list names 29 chart types while the published atlas shows fewer, and the sample figures are stated to come from private data assets and serve as style references only, so judge the scripts rather than the previews.

Frequently asked questions

What does the Copy-First rule do in academic-figure-skill?

Before writing chart code it scans assets/figures/<type>/ and, when a production script matches, runs it natively, with Python running .py and R running .R, with no translation and no downgrade in quality.

What are the three classes of inherited visual parameters?

Class A holds hard parameters such as colour, opacity and line width, Class B holds proportional parameters such as font size and dimensions, and Class C holds logical parameters such as legend and grid switches.

What can make academic-figure-skill refuse to render a figure?

The per-panel data validation gate. A volcano plot needs at least 10 significantly differential genes, AUROC curve separation needs at least 0.15, and a heatmap must show variance across rows.

Which coding assistants does academic-figure-skill support?

Claude Code, Codex, Cursor and GitHub Copilot are documented, each with its own install path. Claude Code and Codex copy the whole package including the references, scripts, assets and install directories.

What does the four-round QA protocol check?

Pass 0 scans for anti-patterns, Pass 1 checks code-level compliance, Pass 2 checks visual logic and data integrity, and Pass 3 validates the rendered output, which is more than 30 checks in total.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. README
  4. TingxiYu/academic-figure-skill on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/tingxiyu-academic-figure-skill.svg)](https://hysenlabs.com/projects/tingxiyu-academic-figure-skill)