inst/myio-schema.json) describing all chart types,
required mappings, valid transforms, and function signatures, generated
from the package’s own contracts.myio_list_chart_types(),
myio_chart_schema(), myio_validate_spec(),
myio_list_functions(),
myio_function_signature(), and
myio_validate_call(). A Model Context Protocol server in
the package’s source repository exposes the same six tools to
MCP-compatible clients.llm-tool-calling demonstrates a
generate-validate-repair loop.quantile_dots chart type and
quantile_dots transform render a Wilkinson dot plot of
predictive quantiles for communicating uncertainty.fan composite renders a fan chart of nested
prediction intervals around a central estimate.myIO(title = ...) and setTitle() add a
backward-compatible chart title surface rendered inside the SVG.
Existing charts that omit a title are unchanged.setAxisFormat(xLabel = ..., yLabel = ...) now render in the
chart SVG, and multi-series charts get a compact visible legend while
preserving the existing action-sheet legend.setLinked() now links waffle,
beeswarm, lollipop, and dumbbell
layers in addition to the previously supported point,
bar, groupedBar, histogram, and
hexbin. Selection dims non-matching elements; filter hides
them. Aggregate chart types (boxplot, violin,
qq, regression, density,
ridgeline, survfit, comparison)
remain outside crosstalk in v1.2.crosstalk-linking demonstrates linking
myIO with DT::datatable() and
reactable::reactable(), with code listings for plotly and
leaflet.myIO() widgets now declare a sizing policy with
browser.fill = TRUE and are tagged as
html-fill-item via htmltools::bindFillRole(),
so they fill container height inside bslib::card(), Quarto
Dashboard {.fill} cards, and flexdashboard layouts.
Rendering in plain RMarkdown and Shiny at the default 400px height is
unchanged.calendarHeatmap chart type —
GitHub-contributions-style grid of daily cells over a single calendar
year. Usage:
addIoLayer(type = "calendarHeatmap", data, mapping = list(date = "day", value = "x")).
Supports Sunday or Monday week starts via
options$weekStart, continuous color legend, and
linked-cursor sync across two linked calendars. Multi-year data is
rejected in v1.2; multi-year layouts are planned for v1.3. New CSS
variables: --chart-calendar-cell-gap,
--chart-calendar-cell-stroke,
--chart-calendar-empty-fill.setTheme(preset = "midnight").
Available presets: midnight, ocean, forest, sunset, monochrome, neon,
corporate, academic, nature, minimal, retro, warm. Plus light/dark via
mode parameter.linkCharts(chart1, chart2, on = "column") enables
cross-chart selection. Brush in one chart highlights matching rows in
linked charts. Works in Shiny and static HTML. Aggregation-to-source-row
key resolution for summary views.linkCharts() and setLinked() gain a
cursor = TRUE argument that draws a synchronized vertical
crosshair on every linked chart when the user hovers any chart in the
group. Supports point, bar, line, area, groupedBar, hexbin, and
histogram layers (donut and treemap are excluded — no x-axis to sync
on). Off by default; enable per-link or retrofit with
setLinkedCursor() on a pre-linked widget. New
--chart-cursor-rule-color/-width/-dasharray
CSS variables theme the crosshair.dplyr::group_by() tibble to
addIoLayer() and it auto-creates one layer per group with
colors from the Okabe-Ito palette. Soft dplyr dependency.addIoLayer(type = "survfit", mapping = list(time = "time", status = "status"))
computes Kaplan-Meier estimator with Greenwood CI using base R only (no
survival package dependency). Composite expands to
step-curve line, CI band, and censored-observation markers. Group
stratification supported.addIoLayer(type = "histogram_fit", mapping = list(value = "x"), options = list(family = "normal"))
fits normal, lognormal, or exponential distributions via MLE. Composite
renders histogram + fitted density curve + optional parameter
annotation.setLayerOpacity(label, opacity) sets per-layer opacity
(0-1). Critical for CI bands overlaying scatter data.graphics-document,
graphics-object, graphics-symbol) applied to
SVG chart structure for screen reader navigation.lollipop — vertical stem with circle head, supports
mean and summary transforms. Compatible with
categorical x-axis charts.dumbbell — connected dots showing a range between
low_y and high_y.waffle — 10x10 grid of colored squares representing
proportions. Standalone.beeswarm — dodge-positioned points to avoid overlap.
Inline dodge algorithm.bump — smooth S-curves showing rank/value changes over
time with grouped lines.radar — spider/radar chart with radial axes and polygon
data fill.funnel — narrowing horizontal bars for conversion
pipeline data.parallel — parallel coordinates for multivariate
exploration. All new types support themed colors and standard tooltip
formatting.setFacet(var, ncol, scales) splits charts into a CSS
grid of panels, one per unique value of the faceting variable. Supports
fixed and free scale modes, auto-layout with configurable minimum panel
width, and responsive breakpoints.setExportOptions() controls which export buttons appear
in the toolbar (PNG, SVG, clipboard, CSV). New SVG download button and
clipboard copy (SVG + PNG) via the Clipboard API.setTheme(mode = "dark") applies a WCAG AA-verified dark
palette across all chart elements. Also supports "light"
and "auto" (detects OS preference and Quarto/Bootstrap
data-bs-theme).setTheme(bg = "#fff")
calls still work.overrides parameter for fine-grained CSS custom
property control.myIO(sparkline = TRUE) renders a compact, axes-free
chart suitable for embedding in table cells (reactable, DT, gt). Strips
legend, axes, reference lines, and all interactions. Default height
20px. Supports line, bar, and area layer types.myio_validate_spec() and the chart specification schema
no longer reject valid specs for chart types with a single required
mapping (for example histogram, gauge, and
qq). The schema now always represents list-typed fields as
arrays.myIO now supports bidirectional data flow — user interactions return structured data, not just visual feedback.
setBrush(): rectangle brush selection on point, bar,
histogram, hexbin, and grouped bar charts. Selected points available as
Shiny reactive input or scoped CSV export in static HTML.setAnnotation(): click any data point to attach a
label. Annotations stored as structured data (source key, coordinates,
label, category color, timestamp) and exportable as CSV. Supports preset
label dropdowns and color category pickers.setLinked(): Crosstalk SharedData
integration for cross-widget linked brushing. Selection dims
non-matching points; optional filter mode hides them. Supports source,
target, or bidirectional modes.setSlider(): parameter sliders below the chart that
trigger Shiny re-rendering with configurable debounce. Renders disabled
with tooltip in static HTML.dragPoints() now correctly emits the
dragEnd event to Shiny
(input$myIO-{id}-dragEnd), which was previously registered
but never fired.type + transform = layer. Transforms compute statistics in
R; renderers display them in D3.js.lm, loess,
polynomial, ci, smooth,
mean, mean_ci, residuals,
summary, pairwise_test, qq.line, point, bar,
area, groupedBar.histogram, hexbin,
regression, qq.boxplot, violin,
ridgeline, comparison.candlestick, waterfall,
heatmap.donut, gauge,
treemap, sankey.boxplot: expands into IQR box + whisker caps + median +
outliers.violin: expands into density area + IQR box + median
point.ridgeline: density curves stacked vertically by
group.regression: scatter + trend line + CI band + R-squared
annotation.qq: Q-Q scatter + reference line + confidence
envelope.comparison: boxplots + pairwise significance
brackets.setToolTipOptions().dragPoints().setReferenceLines().setToggle().myIOOutput() and
renderMyIO().|>.setTheme().