PlotTracer
Releases

What changed, and why.

A running log, newest first. PlotTracer is developed in the open, and each release here is a theme rather than a patch note: what the tool learned to read, and what it stopped getting wrong.

2.5.0 2026-09

The release that learned what a band is

Three chart types join the picker and a fourth is rebuilt, a legend drawn inside the plot can be painted out, and the difference between a coordinate and a category stopped being a detail.

  • Span charts capture a range by its two ends, and candlesticks read which way the day went from the figure's own colours rather than asking you.
  • Stacked bar is its own chart type, because its segments are connected. A segment's base is the top of the one below, read once; the value reported is a height rather than a position on the axis; and moving a boundary carries the stack above it, whether you drag it or type it.
  • Mask an area paints part of the figure out with the paper colour measured around it. It is the answer to a legend drawn inside the plot box: its swatches are the series' own ink at the series' own size, so no colour filter or plot-area rule can tell them from the bars they describe.
  • Reading labels off the figure reaches a heatmap's own columns and rows, and a piece of bar ink caught in the label band no longer rides into the name it was read beside.
  • A heatmap axis says what kind it is, and that decides what it is asked. A named axis derives its bands from a declared count, so it is asked whether the figure's marks sit between the bands or under them. A measured axis is asked neither: its boundaries are in the ink, its clicks are the extent, and its cells are identified by their coordinates.
  • Polar and ternary read the frame and the triangle your own clicks describe, and a model that cannot read back its own calibration points refuses rather than reporting numbers from it.

Full release notes for 2.5.0

2.4.0 2026-09

The release that stopped making you type

Category names are read off the figure instead of typed, bars filled with a hatch come back as bars rather than stripes, a bar is measured to the outside of its own outline, and the download got smaller while all of that was added to it.

  • Drag one box round the row of labels under an axis and every category name comes back at once. The band is cut at the category boundaries you already marked, so each label is read on its own rather than the whole axis being read as one strip.
  • Nothing is written until you say so: the readings arrive in an offer window, one row per category, and each row shows the pixels it was read from beside the name made of them. A row left empty is left alone.
  • Labels printed sideways are read too. Every region is tried at all four quarter turns, and the axis decides which way its labels run rather than each label deciding for itself.
  • A hatch cuts a bar into stripes, and colour alone hands back the stripes. The pieces are rejoined using the category boundaries you marked as the evidence that a pile of fragments is one bar.
  • A figure that strokes its bars used to read every bar low by about a pixel, because the fill stops just inside the stroke. The stroke is now measured and crossed; a figure that draws no outline is untouched.
  • The Linux .deb went from 106.3 MB to 93.2 MB while gaining an OCR engine and its language data. Every release until now packaged about 107 MB of library code nothing in the app could reach.

Full release notes for 2.4.0

2.3.0 2026-08

The release where the bar chart grew up

A bar chart now says where its categories are before it lets you capture one, the error-bar model was rebuilt around the datum that owns it, one click and two clicks became the same gesture on every output panel, and the release was audited until it stopped finding things.

  • A bar chart is calibrated in one walk, and the categories are part of it: two clicks for the value axis, two for the outer edges of the first and last category, and the count typed on the last one. Capture refuses until the walk is finished, and says which step is waiting.
  • A bar whose near end does not sit on the baseline reports both of its measured ends, Min and Max, instead of a single Value that would silently mean the low end on one row and the high end on the next.
  • A cap is now a member of its datum's own row, so the drawing and the record cannot disagree about which cap belongs to which reading. Caps are always draggable, and the handle end is the cap.
  • A value you typed rather than measured reads in square brackets on screen and carries its own source column into the file.
  • Then it was audited twice, once by hand and once by a fleet, and forty findings were fixed before the tag.

Full release notes for 2.3.0

2.2.0 2026-08

Heatmaps

Heatmaps, the commonest figure in the literature and the first coherent digitizer workflow for one, plus the colour key's own extent on screen, and the release where CI started running the tests.

  • A heatmap is the most common figure in the scientific literature, with 406,986 articles containing one, and the one no digitizer had handled coherently.
  • Every cell is read through a calibrated colour key, on boundaries measured from the figure itself rather than divided evenly, so unequal columns come back unequal.
  • The colour key is calibrated as a third axis, with its own kind, scale, ticks and refusals.

Full release notes for 2.2.0

2.1.0 2026-08

Category ticks

Category ticks for bar charts, a corrected spider reading, and a large amount of work on the parts of the app that write your numbers into a file.

  • A bar's category stops being guessed from where it landed relative to its neighbours and becomes the band its own pixel falls in.
  • A spider chart's marker radius was being over-read, which was a live wrong reading rather than a cosmetic fault.

Full release notes for 2.1.0

2.0.0 2026-08

Bar charts become a first-class record

Every digitizer treats a bar chart as a scatter plot you happen to click on the top of each bar. That is not what a bar is.

  • A bar is an interval. It runs from somewhere to somewhere, and both ends carry meaning.
  • Read as a single point, a floating bar loses its lower end, a stacked segment reports the total instead of its own contribution, and a bar below the baseline comes back positive.
  • So a bar is captured corner to corner, and both ends reach the record.

Full release notes for 2.0.0