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().