<< All versions

Skill v1.0.0

currentAutomated scan100/100
trae1oung/paper-plot-skills/plot-from-image
──Details
PublishedOctober 23, 2026 at 10:29 PM
Content Hashsha256:9479938cfaae779a...
Git SHAd417cca5974e
──Files
Files (1 file, 3.5 KB)
SKILL.md3.5 KBactive
SKILL.md · 85 lines · 3.5 KB

version: "1.0.0" name: plot-from-image 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.


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 typeCheck for
Grouped/paired barbar_paired_delta or bar_grouped_hatch
Line with shaded bandsline_confidence_band
Line with cut lines or referenceline_training_curve
Loss curve + zoom panelline_loss_with_inset
Scattered clustersscatter_tsne_cluster
Broken x-axisscatter_broken_axis
Polygon web chartradar_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
All versions