# Scienceplot Py

> >

- **Type:** Skill
- **Install:** `agentstack add skill-axect-skills-scienceplot-py`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [Axect](https://agentstack.voostack.com/s/axect)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [Axect](https://github.com/Axect)
- **Source:** https://github.com/Axect/skills/tree/main/scienceplot-py

## Install

```sh
agentstack add skill-axect-skills-scienceplot-py
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# scienceplot-py — Matplotlib Script Generator (scienceplots / science+nature)

Generate a Python plotting script that **always** follows the user's lab
template shape. The skill writes a `.py` file and returns its path; it does
not run the script. The user executes it themselves (the user prefers
`uv run ` per their global preferences).

The canonical template lives at
`~/Socialst/Templates/PyPlot_Template/pq_plot.py`. Every variant in this
skill is a structural extension of that file.

## Mandatory style invariants

Every generated script MUST keep these load-bearing patterns intact. Do not
"clean up" any of them, even if they look redundant or unused.

1. **`import scienceplots`** — required. It registers the `science` and
   `nature` styles by import side-effect; the symbol is never referenced
   directly. Linters will flag it as unused — keep it anyway.
2. **Style context block** — all plotting code lives inside
   `with plt.style.context(["science", "nature"]):`. Never substitute
   `plt.style.use(...)` or call any plotting outside this block.
3. **`pparam` dict** — axis configuration is a dict, applied with
   `ax.set(**pparam)`. Do not inline `ax.set_xlabel(...)`, `set_ylabel(...)`,
   `set_title(...)` calls when `pparam` would do.
4. **`ax.autoscale(tight=True)`** — called on every axis, before
   `ax.set(**pparam)`. For subplots, loop over all axes.
5. **Raw-string LaTeX** — every label, title, legend entry uses `r'...'`.
   Non-raw `'$x$'` works for the literal `$x$` but breaks the moment a
   backslash appears (`\alpha`, `\sigma`, `\mathrm{...}`). Always `r`-prefix.
6. **savefig** — `fig.savefig(, dpi=300, bbox_inches='tight')`.
   Default filename is `plot.png`. PDF/SVG output is fine if asked, but keep
   `dpi=300` and `bbox_inches='tight'`. (Bump higher only if the user
   explicitly asks for it — the lab default is 300.)

## Workflow

1. Gather what the user has not already given:
   - Data source: parquet / CSV / `.npy` / `.npz`, plus the file path
   - x / y column or array names (and y-error if errorbar)
   - Plot variant: single line, multi-line + legend, scatter / errorbar, or
     subplots (rows × cols)
   - Axis labels, title, legend labels (LaTeX OK — strings will be wrapped
     in raw-string form)
   - Output path (default: `plot.png` next to the data file or in cwd)
2. Pick the matching template under `references/`:
   - `single_line.py` — one series, one ax (mirrors `pq_plot.py`)
   - `multi_line.py` — multiple series, one ax, with legend
   - `scatter_errorbar.py` — `ax.errorbar(...)` (or `ax.scatter(...)`)
   - `subplots.py` — multi-panel `fig, axes = plt.subplots(rows, cols)`
3. Swap in the requested data-loader block. See
   `references/data_loaders.md` for parquet / CSV / `.npy` / `.npz`
   snippets.
4. Substitute column names, label strings, title, output filename. Preserve
   every invariant from the section above.
5. Write the `.py` file with the Write tool. **Do not execute it.**
6. Print the output path and a one-line "run with `uv run `" hint.
   Do not invoke `uv` / `python` from this skill.

## Data sources

| Source        | Imports                | Read call                                          |
|---------------|------------------------|----------------------------------------------------|
| Parquet       | `import pandas as pd`  | `df = pd.read_parquet('data.parquet')`             |
| CSV           | `import pandas as pd`  | `df = pd.read_csv('data.csv')`                     |
| NumPy `.npy`  | `import numpy as np`   | `data = np.load('data.npy')` (then column-slice)   |
| NumPy `.npz`  | `import numpy as np`   | `data = np.load('data.npz'); x = data['x']`         |

Full snippets in `references/data_loaders.md`.

## Templates

Each reference is a self-contained, runnable skeleton matching the
mandatory style invariants. Read the file, adapt strings/columns in memory,
then Write the result to the user's chosen path.

| Variant                | File                                  |
|------------------------|---------------------------------------|
| Single line (base)     | `references/single_line.py`           |
| Multi-line + legend    | `references/multi_line.py`            |
| Scatter / errorbar     | `references/scatter_errorbar.py`      |
| Subplots (multi-panel) | `references/subplots.py`              |
| Data loaders           | `references/data_loaders.md`          |

## What this skill does NOT do

- It does not run the generated script. The user runs it (preferred:
  `uv run `).
- It does not install `scienceplots` / `matplotlib` / `pandas` / `numpy`.
  Assume they are already available in the target environment.
- It does not produce methodology / architecture / pipeline diagrams. For
  those, use the `paperbanana` skill or `wide-slide-illustrator`.
- It does not change the style invariants. If the user asks for a different
  style (e.g., `seaborn`, `ggplot`, plain matplotlib), tell them this skill
  is specifically for the science+nature template and offer to write the
  alternative as a plain script outside the skill.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Axect](https://github.com/Axect)
- **Source:** [Axect/skills](https://github.com/Axect/skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-axect-skills-scienceplot-py
- Seller: https://agentstack.voostack.com/s/axect
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
