# Plot From Image

> Recreate plots from images.

- Skill: `kyrie66nb/plot-from-image` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add kyrie66nb/plot-from-image`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kyrie66nb/plot-from-image/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kyrie66nb (https://skillmd.com/u/kyrie66nb)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kyrie66nb/plot-from-image

---


# 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:

- **Smooth training curves**: use EMA with `alpha=0.95-0.97` before plotting, not raw noisy data
- **Radar labels**: `label_r = 1.10-1.15` (NOT 1.2+, which creates excess whitespace)
- **Inset figures**: measure left/right panel pixel ratio from original → set `add_axes` widths accordingly
- **Broken axis**: use two subplots with `wspace=0.05`, break symbol only at bottom spine
- **t-SNE annotation boxes**: unified dark edge color `#2C3E50`, cluster-color facecolor with `alpha=0.28`
- **Confidence bands**: `fill_between` with `alpha=0.18-0.22`, same color as line

## Resources

- **Analysis guide**: `references/reproduction_guide.md` — step-by-step checklist for new images
- **Style library**: `../plot-from-data/references/` — 8 pre-built style parameter files
- **Script templates**: `../plot-from-data/scripts/` — 8 working reproduction scripts
- **Originals**: `../originals/` — paper figures used in development

