製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Static web app for common plot-and-test workflows. No server, no tracking, no data leaving the browser.
Live: evompmi.github.io/plottr · Source: github.com/evompmi/plottr
Originally built for the "Evolution of plant-microbes interactions" team members at Toulouse Plant Sciences (University of Toulouse, France). Released publicly for anyone with similar needs.
Plöttr is stable and feature-complete as of v1.9.0. It is maintained on an as-needed basis — issues and pull requests are welcome, but no major new work is planned. Because it ships as static files with no runtime dependencies and no backend, it is designed to keep running indefinitely, and every release is archived for citation via Zenodo. Fork freely under the MIT license.
python3 -m http.server, npx serve, nginx, …) — no backend., / \t) and decimal convention (, / .), then walks through column roles → filter → plot → export.<g> groups for Inkscape/Illustrator), PNG (2×), CSV of processed data.| Tool | Purpose |
|---|---|
| RLU timecourse | Luminescence time-course with mean ± SD, per-replicate integrals, inline stats, and optional aequorin Ca²⁺ calibration (Allen & Blinks / Hill / Generalised). |
| Group Plot | Box / violin / raincloud / bar with Welch t / Welch ANOVA + Games-Howell as the default pick (override to Student / one-way ANOVA / Mann–Whitney / Kruskal–Wallis from the stats panel). |
| Line Plot | Mean ± SEM / SD / 95 % CI per group across a shared x, with per-x significance markers. |
| Scatter Plot | XY with colour / size / shape mapping, reference lines, and optional linear regression overlay. |
| Heatmap | Matrix heatmap with row / column clustering (hierarchical, k-means), dendrograms, and zoomed detail view. |
| Venn Diagram | 2–3 set area-proportional Venn with click-to-extract region members. |
| UpSet Plot | 4+ set intersection plot — top bar chart, matrix of participation dots, per-set totals. Click a column to inspect its items. |
| Volcano Plot | log₂FC vs −log₁₀(p) for −omics hits with three-class significance colouring, top-N labels with collision avoidance, click-to-label, search-by-name, optional colour / size aesthetic mappings, classified CSV + ggplot2 R-script export. Auto-detects DESeq2 / limma / edgeR column conventions. |
| Proportions | Counts table → % per group with Wilson 95 % CIs, stacked or mosaic bars, Fisher's exact / χ² test (auto-picked by Cochran's rule), Holm-corrected pairwise Fisher tests, goodness of fit to ratios such as 3:1 or 9:3:3:1. |
| qPCR | Raw Ct → relative expression: 2^−ΔΔCt or efficiency-corrected (Pfaffl) ratios, several reference genes by geometric mean, efficiency from a standard curve, technical-replicate QC, geNorm M. Statistics run on ΔCt (never on fold changes); fold change plotted on a log₂ axis; ΔCt can be sent to Group Plot. |
| Power Analysis | A-priori and post-hoc power for t (indep / paired / one-sample), one-way ANOVA, χ², correlation. |
| Calculator | Molarity, dilution (C₁V₁ = C₂V₂), ligation ratio, batch prep sheets. |
Each tool has an in-app How to panel.
Figures as exported (PNG):
All numerics (tools/_core/stats/*.ts) are cross-validated against two independent references:
iris, PlantGrowth, ToothGrowth, mtcars, …). Current run: 618 comparisons, 0 failures, including 4 rows past R's precision floor, where R's ptukey cancels to ~2.2 × 10⁻¹⁵ while Plöttr's ptukey_upper continues the true tail (cross-checked against SciPy and Monte Carlo). Reproducible via npm run benchmark. Results render as a public page at benchmark.html — failing rows would be shown in red, not hidden.nctcdf at deep δ, ncf_sf / ncchi2cdf at large λ across the noncentral normal-approx threshold, qtukey at extreme corners. 1,083 comparisons, 0 failures, with 92 deep-tail / underflow rows (both values < 10⁻¹³, informational) and 1 pathological annotation (qtukey at df = 1, documented as outside the design envelope in tools/_core/stats/posthoc.ts). Reproducible via npm run benchmark:scipy.On top of that, a deterministic test suite of 2,100+ tests (Vitest 4, CI-gated on every commit alongside ESLint, Prettier, tsc --noEmit, and npm run build) spanning unit, integration, render-smoke (real React 18 + happy-dom), and per-tool property suites (fast-check, with automatic shrinking on failure). A Playwright e2e suite (npm run e2e) covers paste → configure → plot golden paths per tool. Mutation testing is wired up via Stryker (npm run mutation) for on-demand meta-tests of whether the suite catches bugs, not just whether tests pass.
Covers: Shapiro–Wilk, Brown–Forsythe Levene, Student / Welch t, Mann–Whitney U, one-way ANOVA, Welch ANOVA, Kruskal–Wallis, Pearson r / Spearman ρ / Kendall τ-b correlations, Tukey HSD (studentised range), Games–Howell, Dunn + Benjamini–Hochberg, Cohen's d (with 95 % CI), Hedges' g, η², ε², compact letter display.
Numerics are trustworthy, but the design covers a slice of real workflows.
Fits best: one-way group comparisons with a defensible test pick; quick exploratory plotting from pasted CSV/TSV; privacy-sensitive data; publication-ready SVG; a-priori power analysis; reproducibility via the one-click R script export (every statistics tool, plus Heatmap, Volcano and Power Analysis, emits a runnable R script that embeds the data inline and reproduces the exact analysis); niche aequorin Ca²⁺ calibration not first-class anywhere else.
You will outgrow it for: repeated-measures / mixed models, factorial designs (no two-way ANOVA, no interactions, no ANCOVA), Dunnett's test, multiple / logistic / non-linear regression, survival / ROC / time-to-event, large datasets (browser-only, millions of rows won't work), headless batch processing. The auto-pick defaults to Welch's t / Welch ANOVA so it doesn't gate on Shapiro-Wilk; per-group SW at α = 0.05 still inflates the family-wise diagnostic flag rate at large k (~23 % at k = 5 even with everything genuinely normal), but that flag is now a non-parametric suggestion in the trace, not a routing decision. Tunable via alphaNormality.
Use as a supplement to R / Prism / SPSS, not a replacement.
For casual use, visit evompmi.github.io/plottr.
To run offline or modify the source:
git clone https://github.com/evompmi/plottr.git
cd plottr
python3 -m http.server # or `npx serve` — any static-file server works
# Then open http://localhost:8000 in any modern browser.
(Direct file:// no longer works as of v1.3.0: the SPA shell loads tools/_app/index.js as a JavaScript module, and browsers block module loading from file:// origins.)
Node.js ≥ 20 for the tooling (not for running the app):
npm install
npm run build # compile tools/*.tsx → tools/*.js
npm run watch # recompile on save
npm test # full deterministic suite (Vitest 4)
npm run typecheck # tsc --noEmit
npm run lint # ESLint
npm run benchmark # R + SciPy cross-validation (R 4.5, SciPy 1.17)
npm run e2e # Playwright e2e suite
npm run mutation # Stryker mutation testing (on demand)
Architecture, shared-code constraints, and conventions for adding tools are in CLAUDE.md. Versioned changes are tracked in CHANGELOG.md; per-release long-form notes live under docs/release-notes/.
React 18 (vendored under vendor/, no CDN) + esbuild (TSX → JS, ~5 ms incremental) + custom SVG rendering (no charting library) + in-house stats cross-validated against R 4.5 + SciPy 1.17. Plot tools share a typed TypeScript scaffold under tools/_shell/ (step navigator, upload + paste handlers, style-prefs persistence, stats dispatch); each tool's App ships as a lazy chunk, so the SPA only downloads the route you visit. Tests via Vitest 4 with a thin compat shim that preserves the project's house vocabulary. Hosted on GitHub Pages as a single-page app (hash-routed; one esbuild entry plus per-tool code-split chunks).
No runtime dependencies from external CDNs — vendor/ ships React + ReactDOM so a cloned copy works without network access.
If you use Plöttr in published research, please cite the repository. Suggested citation:
Plöttr — a browser-only data-analysis toolbox for wet-lab scientists. https://github.com/evompmi/plottr. M. Mbengue, Laboratoire de Recherche en Sciences Végétales (LRSV), Université de Toulouse, CNRS, UPS, Toulouse INP, Castanet-Tolosan, France.
Plöttr is released under the MIT License. Vendored copies of React + ReactDOM (vendor/) keep their upstream MIT license — see vendor/LICENSE-react.txt. Continued-fraction primitives (betacf, gammainc, gammainc_upper in tools/_core/stats/dist.ts) are ported from the public-domain Cephes Mathematical Library. All algorithmic references and third-party attributions are consolidated in THIRD_PARTY.md.
Plöttr was built collaboratively with Anthropic's Claude (Anthropic Claude Opus 4.8 [Large language model]. https://claude.ai) under researcher direction. The bulk of the JavaScript, tests, and documentation is Claude-written; the researcher specifies needs, reviews proposals, picks scope, sets methodology, and approves every commit before it lands. Architectural conventions are encoded in folder-level CLAUDE.md files so the workflow is reproducible.
What is independently verified. Every statistical function is cross-validated against R 4.5.3 and SciPy 1.17.1 on each npm run benchmark. Mutation testing (npm run mutation, Stryker) probes whether the test suite catches regressions. These checks exist precisely because the implementation is AI-generated.
What is not independently verified and rests on researcher review alone: UI / UX choices, accessibility labels, the in-app How-to panels and the chart aesthetics. Bug reports there are especially welcome — the "Send feedback" button in every tool opens an in-app dialog with the address and a prefilled message you can open in your mail app or copy into webmail.
Plöttr's statistical, numerical, and visualisation methods are independent implementations of published algorithms and methodology. Listed below is every research reference behind the codebase — swept from the source comments and verified against the publishers (Crossref, PubMed, journal pages). Code provenance and licensing for vendored and ported code (React, the Cephes ports, the colour palettes) is detailed separately in THIRD_PARTY.md.
A few entries are books or pre-DOI papers with no DOI; those carry an archival or publisher link where one exists, or none at all.
home.online.no/~pjacklam) is offline and archived via the Internet Archive Wayback Machine.