PlotRuler
A translucent desktop overlay for accurately reading (X, Y) values off a graph shown on screen.
PlotRuler does not render the graph; it is a live see-through overlay. The graph is whatever is running underneath — a browser, a PDF viewer, a plotting window. Calibrate once by clicking a couple of known points and typing their labels, then hover to read coordinates anywhere else, and click to copy coordinates to clipboard.
Quick start
Windows (exe)
grab PlotRuler.exe from the latest release, run it, and press Win+Alt+P to summon the overlay.
All platforms (Python)
pip install plotruler
plotruler
On Linux, an X11 session is required, and the Qt X11 backend needs the
libxcb-cursorsystem library (pip cannot install it):sudo apt install libxcb-cursor0 # Debian / Ubuntu sudo dnf install xcb-util-cursor # Fedora / RHEL sudo pacman -S xcb-util-cursor # Arch
The first time, press Ctrl+N to calibrate: click two points on the X axis and two on the Y axis, typing each point's labeled value. Readout works immediately after.
Features
- Hover to read — a crosshair and a live
(X, Y)readout follow the cursor once calibrated. - Click to copy — a click copies the hovered coordinate (e.g.
12.5, 4.0) and flashes confirmation. - Number formats — plain, scientific, engineering, E-notation, and SI prefixes; cycle with the number keys
1–6or from the tray menu. - Linear or log axes — each axis is calibrated independently and can be linear or log scale.
- Persists — calibration, window position, and number format survive restarts, so the overlay reopens already calibrated.
- Frameless & tray-resident — a custom translucent title bar; the overlay lives in the system tray and toggles with a tray click or hotkey.
Usage
- Ctrl+N — start a calibration.
- Ctrl+Z — undo the last calibration step.
- Esc — cancel a calibration, or hide the overlay.
- Win+Alt+P — toggle the overlay (Windows, configurable).
- 1–6 — switch the readout number format (when the overlay is focused).
- Tray icon — show/hide, start a calibration, change the hotkey, change the number format, quit.
The calibration prompt, its hints, and the (X, Y) readout are drawn on the overlay itself; see the on-screen instructions while calibrating. Without a system tray there's no way to summon a hidden overlay, so on such systems Esc (and minimize) quit instead of hiding, and a close button is shown.
How it works
Calibration and readout use absolute screen coordinates (physical pixels), not coordinates relative to the overlay window. That is what keeps the calibration glued to the graph: you can drag or resize the overlay and the calibrated region stays put over the plot beneath it.
Each axis is a line fit through two reference points — a screen pixel and its value. After you enter the second point on an axis, a Linear / Log choice appears; pick one for that axis, then move on to the next. (If a point's value is zero or negative, a log scale is impossible, so that axis is automatically linear and the choice is skipped.)
Platform support
| Windows | macOS | Linux (X11) | |
|---|---|---|---|
| Overlay readout | ✅ | ✅ | ✅ |
| Calibration survives window move | ✅ | ✅ | ✅ |
| Global hotkey | ✅ (Win+Alt+P) | ⏳ | ⏳ |
| System tray | ✅ | ✅ | ⚠️ (DE-dependent) |
Wayland is not supported yet. Wayland forbids absolute screen coordinates by design, so the overlay model cannot work there today without a window-relative rewrite. Use an X11 session on Linux. Longer-term the plan is to support Wayland as a regular (non-overlay) window: a normal window doesn't need absolute coordinates, so it works there. macOS is architecturally supported (Qt provides a native path) but no macOS build exists yet — treat that column as planned, not shipped.
Configuration
Settings live in a per-user plotruler.json config file in the platform's application-data location — %LOCALAPPDATA%/PlotRuler on Windows, ~/.config/PlotRuler on Linux. Calibration, window geometry, the global hotkey, and the number format are all saved there.
Building from source
For contributors and local development. Requires Python 3.10+:
git clone https://github.com/endolith/plotruler.git
cd plotruler
pip install -e ".[dev]"
plotruler
The test/dev commands are pytest, ruff check ., and ruff format ..
Build the Windows exe
python -m pip install pyinstaller
python build/build.py
This produces a single-file dist/PlotRuler.exe (~46 MB, bundles Qt and needs no Python install) — the artifact attached to a GitHub release.
License
MIT (see LICENSE).
(This was generated almost entirely by AI under human direction, so likely lacks the human authorship required for copyright in the US and is therefore in the public domain. MIT license applies anywhere else.)
Metadata
Release files for plotruler 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| plotruler-0.1.5.tar.gz | 64.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| plotruler-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 109.1 kB
Release files / plotruler-0.1.5.tar.gz
| Download URL | plotruler-0.1.5.tar.gz |
|---|---|
| Size | 64.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
beb36adab60e8202284a3672f5c2a80da3a4b153491cabea482d475dc8d02745
|
|
BLAKE2b-256 checksum How to use checksums |
3f27c238aa356f9a964d0f776bc6dba0285d71468c31e1878a06390cb9c04e2b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / plotruler-0.1.5-py3-none-any.whl
| Download URL | plotruler-0.1.5-py3-none-any.whl |
|---|---|
| Size | 44.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1f4572083a56744420a57051115ce9d68f03bcd432f69e769a40c5735c49ecb2
|
|
BLAKE2b-256 checksum How to use checksums |
1c3cd9820b6bd0fe76068d771a55ac57f73138e739b132c449c0d094fd1936d9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency log