# Plot From Image

Reproduce any academic paper figure from an uploaded image using accumulated style...

- Repository: https://github.com/Trae1ounG/paper-plot-skills (936 stars)
- Category: Media
- License: see repository
- Last updated: 2026-04-20
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add Trae1ounG/paper-plot-skills --skill plot-from-image -g -a claude-code -y`
Codex: `npx skills add Trae1ounG/paper-plot-skills --skill plot-from-image -g -a codex -y`
Cursor: `npx skills add Trae1ounG/paper-plot-skills --skill plot-from-image -g -a cursor -y`
Gemini CLI: `npx skills add Trae1ounG/paper-plot-skills --skill plot-from-image -g -a gemini-cli -y`

## Description

Reproduce any academic paper figure from an uploaded image using accumulated style experience. Use when: user uploads/attaches a paper figure and asks to reproduce or recreate it; user says "复现这个图", "reproduce this plot", "match this figure", "照着这个图画"; or user provides a paper figure PNG/screenshot and wants Python matplotlib code that generates it. Includes analysis workflow for font detection, color extraction, proportion matching, and mapping to 8 pre-built styles or creating a new style from scratch.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Plot From Image

Reproduce a paper figure by analyzing the image and leveraging accumulated style knowledge.

## Workflow

### 1. Measure Proportions

```python
python3 -c "from PIL import Image; img=Image.open('fig.png'); print(img.size, f'AR={img.size[0]/img.size[1]:.2f}')"
```

Set `figsize=(FW, FH)` so `FW/FH` matches the original AR exactly.

### 2. Match to Existing Style

Check if the figure matches a pre-built style (fastest path):

| Figure type | Check for |
|-------------|-----------|
| Grouped/paired bar | `bar_paired_delta` or `bar_grouped_hatch` |
| Line with shaded bands | `line_confidence_band` |
| Line with cut lines or reference | `line_training_curve` |
| Loss curve + zoom panel | `line_loss_with_inset` |
| Scattered clusters | `scatter_tsne_cluster` |
| Broken x-axis | `scatter_broken_axis` |
| Polygon web chart | `radar_dual_series` |

If matched → read `../plot-from-data/references/<name>.md` for exact parameters → adapt `../plot-from-data/scripts/<script>.py`.

### 3. If No Match → Analyze From Scratch

Read `references/reproduction_guide.md` for the full analysis checklist covering:
- Font family detection (serif vs sans-serif, LaTeX vs not)
- Spine & tick style (L-shape, 4-sided, arrows, in/out direction)
- Color identification (tab10 vs custom)
- Grid style (dashed, dotted, none)
- Special elements (insets, broken axes, radar grids, annotation boxes)

### 4. Build & Iterate

```
Write script → python3 <script>.py → visually compare → fix proportions/colors → re-run
```

Key iteration checklist:
- [ ] AR matches original (measure with PIL)
- [ ] Font family correct (serif for LaTeX papers, sans-serif for system fonts)
- [ ] Colors within ±10 RGB of original
- [ ] Spine style matches (L vs 4-sided)
- [ ] Tick direction matches (in vs out)
- [ ] Grid style matches
- [ ] Legend placement matches
- [ ] Annotations/labels position matches

## Accumulated Experience

From 9 reproduced figures across 7 papers, key lessons:

The rest: https://github.com/Trae1ounG/paper-plot-skills/blob/HEAD/plot-from-image/SKILL.md
