CircleLab

Interactive circadian rhythm analysis — cosinor fitting, differential rhythm comparison, outlier detection, and period detection in a single Shiny app. No coding required.

What you can analyze

Cosinor fitting Differential rhythm Repeated measures Grubbs outliers Periodogram (R²) Lomb-Scargle PNG export · 300 dpi

Built for circadian biology

Drop in a CSV with Time and Value, and CircleLab does the rest. Statistics, fits, and publication-ready plots in seconds.

Cosinor fit

MESOR, amplitude, peak time (acrophase), and rhythm p-value per file — with confidence intervals.

Differential rhythm

Compare two groups, or run pairwise comparisons across three or more — including repeated-measures with Tukey post-hoc.

Outlier detection

Grubbs test per timepoint with one-click exclusion. Re-fit and re-plot instantly.

Period detection

R²-periodogram (2–48 h scan) and Lomb-Scargle for unevenly-sampled data.

Customizable plotting

Light or dark mode, custom fonts, palettes, error bars, shading. Tuned for figure-quality output.

PNG export · 300 dpi

Publication-ready figures, one click. No screenshot crops, no resolution surprises.

Up and running in minutes

Use the macOS launcher, or run the R/Shiny version directly. The WebAssembly bundle runs entirely in your browser — no server, no data upload.

# Clone the repository
git clone https://github.com/sasif14/circlelab.git
cd circlelab

# Option 1: Run R/Shiny version (live-reload while developing)
Rscript -e 'install.packages(c("shiny","bslib","ggplot2","dplyr","colourpicker"))'
Rscript -e 'shiny::runApp()'

# Option 2: Build the WebAssembly bundle
Rscript tools/build_shinylive.R

# Option 3: macOS — double-click CircleLab.app

A CSV is all you need

Each uploaded CSV should contain at least these columns:

ColumnTypeNotes
TimenumericTime in hours (e.g. ZT)
ValuenumericMeasured response
SubjectstringOptional — required for repeated-measures