Scientific charts on the same engine. The tell is the axis: 10ⁿ ticks and the 2–9× grid scientists look for. Log math alone still looks linear.
The furniture10ⁿ ticks
Inputraw values
Proofbytes + math
LicenseAGPL-3.0
sci-core is the scientific module. Scatter, error bars, growth curves, survival, volcano — drawn as SVG, byte for byte, from a JSON spec. No headless browser. It is not matplotlib parity. The named types exist. Boxplot and histogram do not, yet.
What a scientist checks first is the furniture: decade labels in power notation, and minor gridlines bunching toward the top of each decade. That is the product.
Raw values in
Event times and censoring. Fold-changes and p-values. CFU counts. You do not precompute the curve, the −log₁₀, or the fit. Raw numbers go in the spec. The engine computes at render. A missing or non-numeric point fails loud. Nothing is dropped in silence.
Same experiment, same data — the axis is the difference
E. coli growth, 120 → 71,000 CFU/mL over 3 hours. On a linear axis the first hour vanishes. On a log axis every decade is readable.
Error bars on a real log–log
Dose–response. Two compounds. Whiskers are in the spec; the engine draws them on the same 10ⁿ furniture.
Kaplan–Meier in the engine
Raw event times and censoring go in. The estimator, censor ticks, and median annotation are computed at render. The curve is never stored.
Volcano — classify in-engine
Fold-changes and raw p-values in. The engine computes −log₁₀(p), draws the thresholds, and colors up / down / not significant.
Reproducible
No clock. No random. Same spec, same SVG bytes, forever. A golden net guards the picture. A statistical harness guards the numbers — Kaplan–Meier, Bland–Altman, probit, Q-Q, −log₁₀(p), the 10ⁿ ticks — against hand-computed references and published constants.
You are reading a Page. Add `.json` to this URL. That file is the recipe. The fingerprint at the bottom must match.
Not here: boxplot and histogram. This is not an open-ended scientific visualization library. Named types, real log axes, raw in, stats in-engine, same spec → same bytes.
fingerprint sha256:a114c4b7479fd945434835f03318c9ccf2792a3e21ed82fad5ff0de25de5647f · verify: add .json to this page's URL