Create interactive 'd3.js' visualizations from R with built-in statistical transforms. Computes confidence intervals, regression fits, LOESS smoothing, moving averages, error bars, and uncertainty visualizations (quantile dot plots and fan charts) in R and renders them as composable chart layers via 'htmlwidgets'. Supports 36 chart types including boxplots, violin plots, Q-Q diagnostic plots, calendar heatmaps, survival curves, and group comparisons with pairwise significance testing. Also provides a machine-readable chart specification schema with validators so that large language model agents can author and verify charts. Works in 'RStudio', 'Shiny', and 'R Markdown'.
An R package for creating interactive d3.js visualizations using htmlwidgets. Supports 36 chart types including scatter plots, line charts, uncertainty views, statistical composites, and more — all composable through a piped API.
# install.packages("devtools")
devtools::install_github("mortonanalytics/myIO")
Build plots by piping layers together with myIO() and addIoLayer():
library(myIO)
myIO() |>
addIoLayer(
type = "point",
color = "#E69F00",
label = "points",
data = mtcars,
mapping = list(x_var = "wt", y_var = "mpg")
) |>
addIoLayer(
type = "line",
transform = "lm",
color = "red",
label = "trend",
data = mtcars,
mapping = list(x_var = "wt", y_var = "mpg")
)
The table below covers common chart types. See the Chart Types article for more examples, or run myio_list_chart_types() for the complete list.
| Type | type value |
|---|---|
| Scatter plot | "point" |
| Line chart | "line" |
| Bar chart | "bar" |
| Grouped bar chart | "groupedBar" |
| Area chart | "area" |
| Histogram | "histogram" |
| Heatmap | "heatmap" |
| Candlestick | "candlestick" |
| Waterfall | "waterfall" |
| Sankey | "sankey" |
| Boxplot | "boxplot" |
| Violin | "violin" |
| Ridgeline | "ridgeline" |
| Donut chart | "donut" |
| Gauge chart | "gauge" |
| Hexbin plot | "hexbin" |
| Treemap | "treemap" |
addIoLayer()| Argument | Description |
|---|---|
type |
Chart type (see table above) |
color |
Any CSS color string |
label |
Unique identifier for the layer |
data |
A data frame |
mapping |
List mapping variables, e.g. list(x_var = "wt", y_var = "mpg") |
transform |
Optional derived-data transform, e.g. "identity" or "lm" |
myIO charts are bidirectional — user actions flow back as structured data:
setBrush() — Rectangle select returns selected rows as datasetAnnotation() — Click to label data points; export annotations as CSVsetLinked() — Crosstalk linked brushing across multiple chartssetSlider() — Parameter sliders that trigger Shiny recomputationaddKeyframe() — Register complete data snapshots for sequential storytellingsetKeyframe() / stepKeyframe() — Select or step keyframes through a Shiny proxy| Runtime | Supported path |
|---|---|
| RStudio, R Markdown, and Quarto | Standard htmlwidgets rendering |
| Shiny | Widget rendering, reactive inputs, proxy data updates, and keyframe control |
| WebR 0.6.0 | Precompiled Wasm package, R payload creation, and production-bundle rendering in Chromium |
The WebR claim is intentionally bounded to the pinned end-to-end CI path; it does not imply that DuckDB-WASM or every browser host has been validated.
Customize plots by chaining additional functions:
setAxisFormat() — Set d3.js axis formats and labelssetAxisLimits() — Set axis rangesdefineCategoricalAxis() — Define a categorical axissetMargin() — Adjust chart marginssetColorScheme() — Apply a custom color palettesetTheme() — Set theme tokens (colors, font, background)setTransitionSpeed() — Control animation durationsetTransition() — Configure duration, easing, and staggersetToolTipOptions() — Configure tooltip behaviorsetToggle() — Enable layer toggle controlsflipAxis() — Swap x and y axessuppressAxis() — Hide axessuppressLegend() — Hide the legendsetLegendTitle() — Title the legend with the grouping variabledragPoints() — Enable draggable pointssetReferenceLines() — Add reference linesSee the Getting Started, Chart Types, Sequential Storytelling, Shiny Integration, and Transforms & Theming articles for full examples.