orangemetabo — MetaboAnalyst-Style Statistics for Orange3
Author: Philipp Weller (AK Weller) · philipp.weller@googlemail.com
Add-on for Orange3 that reproduces the MetaboAnalyst univariate workflow for GC-MS / GC-IMS feature tables (Compound Discoverer exports), as used in the coffee-fermentation study (AK Weller).
Pipeline
Feature Table CSV ──> Preprocess ──> [Filter] ──> Univariate Stats ──> Heatmap
(2-header, ;) (Sum-Norm, (QC) (ANOVA / Welch / (Top-N,
log2, Imputation, Kruskal + BH-FDR Ward cluster,
Autoscale/Pareto) + log2FC + means) PNG/SVG export)
└─> Volcano
(log2FC vs -log10 FDR)
Widgets (category Metabo Weller)
| Widget | Function |
|---|---|
| Metabo Feature Table | Load Compound Discoverer 2-header semicolon CSV; sample×feature Table with group/sample metas; pseudo-replicate (<3 replicates) hint |
| Metabo Preprocess | Optional imputation (min / k-NN) → sum-normalisation → log2 → autoscale (z) / Pareto |
| Metabo Feature Filter | Drop features by missing fraction, zero variance, constant, or below-detection threshold |
| Metabo Univariate Stats | One-way ANOVA, Welch two-sample t-test, or Kruskal-Wallis per feature + Benjamini-Hochberg FDR + log2FC + group means |
| Metabo Volcano | Volcano plot (log2FC vs. −log10 FDR) for a two-group contrast — taken from the Univariate Stats results, or computed from Data alone (Welch t-test + BH-FDR) so Preprocess → Volcano already plots; FDR/|log2FC| thresholds, direction colours, top-N labels, PNG/SVG export; click a point to select a feature (shift-click to add) to see its per-group distribution as a box plot; emits the significant features and the selected features' sample values |
| Metabo Heatmap | Top-N features by p, Ward/Euclidean row clustering, group bar, PNG/SVG export |
Correctness
orangemetabo/metabo_core.py is the headless, Qt-free analytics core.
The default pipeline (sum-normalise → log2 → autoscale → one-way ANOVA →
BH-FDR) reproduces the validated ground truth
analysis_CV/cv_anova_alle_97_features.csv exactly: 97/97 features on
F, p, and FDR (max abs diff < 5e-5). Reproduce with _test_core.py
(core) and _test_e2e.py (all six widgets, offscreen) — both run against the
Dropbox ground truth and print 97/97. The volcano contrast is checked to equal
the Welch log2FC and the ground-truth log2FC_ANF_vs_WILD column.
Note on the volcano's fold change: it is the difference of the per-group means in the space of the data you feed in. For a real log2 fold change, preprocess with Sum normalisation + log2 and no scaling (Metabo Preprocess → Method "Sum (total area)", log2 on, Scaling "None"). With autoscaled/Pareto data the x-axis is a scaled mean difference (the p-values are unaffected, since the t-test is scale-invariant per feature).
Plot interaction
The plot widgets (Metabo Volcano, Metabo Heatmap) behave like any Orange plot widget:
- Wheel over the plot zooms around the cursor; drag with the left button pans — no mode to switch on first.
- ”Reset view” button restores the automatic view; the toolbar above each canvas is deliberately slim — Home (= reset view) and Save only. The modal pan/zoom/back/forward tools are removed because they swallow the left button, which made point selection impossible until you found your way out of the mode again; panning/zooming are direct gestures instead.
- Your zoom/pan survives redraws (changing a threshold, selecting a point,
…). A plain matplotlib canvas would autoscale on every draw and silently drop
the view —
PlotCanvas.after_draw()prevents that. - Points are clickable at the edges and selection works in every state: it picks the nearest feature within a 12 px radius (an edge point like a max-log2FC hit is no longer glued to the axis spine / unclickable), and is not gated on the toolbar mode.
- The volcano legend is draggable; the volcano/box-plot split has a draggable divider.
- Orange's Save graph / copy-to-clipboard / report entries work
(
graph_nameis set), and the widget window is resizable.
Implementation:
orangemetabo/widgets/_plot.py(PlotCanvas: wheel zoom, drag-pan, click selection, view preservation, reset;attach_toolbar(slim Home+Save, Home wired to reset),draggable). Orange's own plots are pyqtgraph based and get this for free; the Metabo plots are matplotlib, hence the helper.
Installation
cd orange-metabo-addon
/Applications/Orange.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3 -m pip install -e .
Or from the monorepo: python ../orange-install.py metabo.
Metadata
Release files for orangemetabo 0.4.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| orangemetabo-0.4.3.tar.gz | 28.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| orangemetabo-0.4.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 62.0 kB
Release files / orangemetabo-0.4.3.tar.gz
| Download URL | orangemetabo-0.4.3.tar.gz |
|---|---|
| Size | 28.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e70cbeb64575a4dd66194036126439e0af61af508f6026ec64d192183dc3d134
|
|
BLAKE2b-256 checksum How to use checksums |
c40e030160f1f8471ce162c2480eb338677d1b3bc123063d0a64b6c83c1591e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.8
|
Release files / orangemetabo-0.4.3-py3-none-any.whl
| Download URL | orangemetabo-0.4.3-py3-none-any.whl |
|---|---|
| Size | 33.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
507c12dd97c108a5cd62b59778bf01dbd67c8e46829bfb600719350872c26cc8
|
|
BLAKE2b-256 checksum How to use checksums |
3da199b14a4678153769cf4a79e81f0163b77222876657903d32d7c744f7228b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.8
|