Skip to the digitizer
CDIGIT

Extract data from graph image

Separate each ink into its own series, then keep the free download to ten rows.

X midpoint5.0000
Y midpoint50.0000
R²0.9984
Series2

File Two-Series Stress-Strain Curve · 800x520. The picture stays in this browser. Sample: sample-stress-strain.png.

Alloy A Alloy B

Last point 10.0000 95.0000

Manual points, resample, and exact anchors
Add

10-point check

Free file: the first 10 rows of the active series, columns series, x, y. Width 800 px. PROOF is stamped on the PNG.

Sample rows 10

  1. 0.0000 0.0000
  2. 0.5000 8.7500
  3. 1.0000 17.5000
  4. 1.5000 26.2500
  5. 2.0000 35.0000
  6. 2.5000 41.7500
  7. 3.0000 48.5000
  8. 3.5000 55.2500
  9. 4.0000 62.0000
  10. 4.5000 66.0000

Pro export

Pro replot

Strain (%) Stress (MPa)
Aligned rows
100
Locked rows
90
Row 1
0.0000 0.0000 0.0000
Row 10
0.9091 16.3599 13.0654
  1. 0.2020 3.5720 2.8558
  2. 0.3030 5.3809 4.3009
  3. 0.4040 7.2010 5.7543
  4. 0.5051 9.0290 7.2137
  5. 0.6061 10.8621 8.6769
  6. 0.7071 12.6969 10.1414
  7. 0.8081 14.5306 11.6050
import matplotlib.pyplot as plt
# 10-point calibration sample for Alloy A. Rows after these 10 stay in the paid archive.
x = [0.0000, 0.5000, 1.0000, 1.5000, 2.0000, 2.5000, 3.0000, 3.5000, 4.0000, 4.5000]
y = [0.0000, 8.7500, 17.5000, 26.2500, 35.0000, 41.7500, 48.5000, 55.2500, 62.0000, 66.0000]
plt.plot(x, y, marker="o")
plt.show()
reproduce_plot.py
reproduce_plot.R
reproduce_plot.m
overlay-verification.svg
overlay-verification.pdf

Unlock Pro research packs for this figure. A 7-day pass is $8.99, the monthly plan is $11.99, and lifetime is $29.

Early Launch Price · 50% Off 7-Day Research & Paper Pass $17.99 $8.99

Launch Offer · Save 50% Monthly Lab & Engineering Plan $23.99 $11.99/month

Best Value · 50% Off Lifetime Researcher License $58.00 $29.00

Pack status idle

Steps

From ticks to a sample

  1. 01 Open the two-alloy chart

    Or drop your own PNG. The previous figure’s points are cleared either way.

  2. 02 Set hue tolerance

    Leave 18 for the built-in pair. Widen it only if a real photo splits one stroke.

  3. 03 Press Trace curves

    Examples reload Alloy A and Alloy B. Photos cluster saturated pixels in the browser.

  4. 04 Read the legend

    Confirm the series count, then download the 10-point sample for the active ink.

Check

Which ink becomes which series

Built-in stress-strain inks. The free CSV still has no second header for color.
SeriesInkVerticesPaid rows after 0.5 step
Alloy A#d64545621
Alloy B#2f6fed621
Free sampleactive series10 rowsseries, x, y

This page is the same bench, aimed at one picture that holds more than one ink. The default figure is the two-alloy stress-strain chart. Kaplan–Meier, the pump curve, and the catalyst means are the other presets. Each preset replaces the vertices, so a leftover point from the previous figure cannot survive the switch.

Color is a label, not a guess about the material. Alloy A stays the red series and Alloy B the blue series because those are the colors in the figure definition. The legend text contains both names and nothing else, so you can read the assignment without a second key.

Hue tolerance is an integer from 0 to 60, default 18. The visible field and the slider in Advanced write the same number. Zero means a very tight match. Sixty accepts a broad family of neighboring hues and can merge two curves that a journal printed in similar reds.

On your own image the tracer builds up to eight series and at most 50 points each. Columns are median-filtered so a thick stroke becomes one y per x bucket. The mapping from those pixels to data uses the anchors and the scale you set, including log10 when that scale is selected.

Built-in trace is deterministic on purpose. Pixel noise must not move an acceptance row. If you need the 0.5-step Alloy A series past row 10, that density is produced when the paid route densifies a sparse polyline: 20 equal gaps, 21 rows, both alloys.

pixel-data.csv pairs each densified point with px and py. For the published stress-strain anchors, the origin (0, 0) lands on pixel (80, 460) when deskew is 0. A non-zero deskew rotates that pixel around the axis origin by the rotation formulas on the formula page.

Grid removal on the server is a flag on cleaned coordinates. The browser already refused gray pixels. The route does not receive the bitmap, so it cannot re-scan the lattice. Send the series you see in the overlay, not a screenshot encoded as text.

The free sample for a line still shows only ten rows. If Alloy A is active, row 2 remains 0.5000 and 8.7500. Switching the active series by adding a new one changes the sample to that series. The aligned matrix in the Pro dock still includes every series.

Eight series is the hard stop on the canvas and in the zip. A ninth click opens the unlock line and does not append a row. Fifty points is the same kind of stop. The archive’s higher cap is 1,000 points per series, which is enough for a dense manual trace of a smooth datasheet curve.

Overlay marks sit on the vertices you stored. They use the series color and a light ring so they stay visible on both red and blue ink. Dragging an anchor moves the mapping for the whole figure. The data values of existing points do not change when you only move a handle.

A failed decode is an error, not an empty success. Zero-byte files, files over 10,485,760 bytes, and files whose headers are not PNG, JPEG, WEBP, or SVG are refused. PDF pages are out of scope: export a bitmap from the reader, then drop that bitmap.

Use this page when a methods figure stacks treatment and control, or when a materials plot compares two alloys. For a single semi-log curve, the log-axis page shows the geometric-midpoint check more directly. For whiskers, use the bar page so SD is not interpolated away.

The Pro replot redraws from data, not from the photo. It is an SVG with the axis titles placed apart from each other. The Matplotlib snippet under it embeds only the ten calibration rows, including 8.7500 for Alloy A. Copying that snippet cannot rebuild row 21.

Checkout buttons on this dock list the same three prices as the home bench: $8.99, $11.99 per month, and $29, each with the crossed launch comparison. Buying from here saves the current series in local storage and restores them when you come back.

Two longer notes sit beside the tool: curve digitizer online formulas and the scientific plot digitizer path for meta-analysis.

Uses

Where the numbers go

FAQ

Questions from the bench

How are Alloy A and Alloy B kept apart?

They are stored as two series, #d64545 and #2f6fed. Trace on the built-in stress-strain figure reloads both names. The legend lists both, and the series count reads 2. A new series button adds a third empty series, up to eight.

Does the hue number change the example?

Not the authored example. Filling 18 and pressing Trace still returns Alloy A and Alloy B. On a photograph, 18 is the circular hue distance in degrees. Pixels outside that distance of a cluster center stay off that series.

Why is the gray grid ignored?

A pixel is skipped when saturation is below 0.15, value is above 0.92, or value is below 0.12. That removes white paper, near-black rules, and the light gray lattice behind most journal plots. It does not remove a pale colored stroke if saturation is high enough.

What is in the free file versus the archive?

The free CSV and JSON hold the first 10 rows of the active series only, columns series, x, y. The paid multi-curve zip adds every densified row for each series, an xlsx sheet, and pixel-data.csv with px and py. Unpaid calls receive HTTP 402 and no archive.

Can I trace a user PNG the same way?

Yes, after the file decodes in the browser. The tracer bins hue, keeps the strongest separated colors, and maps median column positions through your anchors. If it finds no stroke, the status line says so. It does not pretend the trace succeeded.

Does deskew happen before I pay?

The free canvas does not rotate the bitmap. Deskew degrees, from −15 to 15, are sent with the paid request and applied to the reconstructed pixels before they are written. A value outside that range is rejected after the payment check.

Family

Same engine, different figure