mcpField
P
plot-from-image

plot-from-image

github.com/trae1oungData & databases91955 installsUpdated 27w ago
Repository

About plot-from-image

plot-from-image is a skill for recreating research-paper figures from images, aimed at people producing plots with Python. It combines proportion and style analysis with reusable templates and iteration guidance.

Key features

  1. 01Measure and match figure aspect ratio
  2. 02Identify matching pre-built plot styles
  3. 03Analyze fonts, colors, axes, and grids
  4. 04Use reproduction checklist to refine plots

Use cases

  1. 01Recreate a paper figure from an image
  2. 02Match typography and axes to a reference
  3. 03Adapt an existing plot style template

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/trae1oung/paper-plot-skills --skill plot-from-image

After installing, type/plot-from-imagein Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

agents/
openai.yaml
references/
reproduction_guide.md
scripts/
classwise_iou_table.py

Details

From the project README

Plot From Image

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

Workflow

1. Measure Proportions
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

Comments

Markdown supported