Provides R bindings for 'Mosaic', a declarative grammar for linked, data-driven visualizations backed by 'DuckDB'. The package supplies 'htmlwidgets' and 'shiny' helpers for rendering 'Mosaic' specifications from R, including optional browser-side 'DuckDB-WASM' execution and selection export helpers for exploratory workflows.
R bindings for the Mosaic declarative visualization framework from UW IDL. Define linked, interactive plots from R or Shiny — brushing, cross-filtering, pan/zoom, and selection — backed by DuckDB for high-performance querying. Specs can be written as JSON, YAML, or inline ESM/JavaScript.
The Mosaic JavaScript libraries (v0.21.1) and a DuckDB-WASM connector are
bundled inside the package under inst/htmlwidgets/, so the widget renders
without network access.
Once on CRAN:
install.packages("rMosaic")
Development version from GitHub:
# install.packages("remotes")
remotes::install_github("TiRizvanov/rMosaic")
library(rMosaic)
df <- data.frame(
x = rnorm(200),
y = rnorm(200),
grp = sample(LETTERS[1:3], 200, replace = TRUE)
)
spec <- '{
"meta": { "title": "rMosaic demo" },
"data": { "df": {} },
"plot": [{
"mark": "dot",
"data": { "from": "df" },
"x": "x", "y": "y", "fill": "grp"
}],
"width": 600, "height": 400
}'
runMosaicApp(
spec = spec,
specType = "json",
data = list(df = df),
title = "rMosaic demo"
)
mosaic() accepts specs as an R list, a JSON or YAML character string, a
file path (.json, .yaml, .js, .mjs), or an inline ESM module via
specType = "esm".
library(shiny)
library(rMosaic)
ui <- fluidPage(
mosaicOutput("vis", width = "100%", height = "600px")
)
server <- function(input, output, session) {
output$vis <- renderMosaic({
mosaic(spec = spec, specType = "json", data = list(df = df))
})
}
shinyApp(ui, server)
runMosaicExport() (and runMosaicWithExport()) launch the widget with an
Import Selection button that pulls the current brush back into R as a
data.frame:
runMosaicExport(spec = spec, specType = "json", data = list(df = df))
The package ships several vignettes that walk through real-world dashboards:
| Vignette | Topic |
|---|---|
getting-started |
Core API and the spec lifecycle |
format-json, format-esm |
Spec format options |
dynamic-rendering |
Pan/zoom with on-the-fly binning |
taxi-crossfilter |
Multi-view dashboard, 1M+ rows |
athletes-dashboard |
Tables and linked selections |
gaia-stars |
Astronomy dataset, 5M points |
protein-design-explorer |
Marginal histograms, raster, and table |
Open any of them with, e.g., vignette("getting-started", package = "rMosaic").
Issues and pull requests are welcome on
GitHub. Please report bugs to
the package maintainer listed in DESCRIPTION.
MIT — see LICENSE for the full text, including the third-party Mosaic license bundled with the JavaScript assets.
Developed in the Dries Lab at Boston University. Funding support was provided by the Dries Lab and the Boston University Undergraduate Research Opportunities Program (UROP).