Skip to content

Mark Capability Audit

Randy Zwitch edited this page Sep 9, 2026 · 1 revision

Mark capability audit

Maintainer inventory for deciding which cross-mark gaps are worth closing. This is not an end-user feature-comparison page: an empty cell means only that the shared mechanism is not implemented for that mark. It does not mean the combination is useful, coherent, or should be built.

Audited against main at 0cace03 (55 Mark constants). Update the commit and table when shared behavior changes or a mark is added.

Current implementation

Mark SVG tooltip Data label annotate_* Log x Log y Horizontal option Encoded color/size
POINT ✓ ✓ ✓ ✓ ✓ ✓
LINE ✓ ✓ ✓
BAR ✓ ✓ ✓
AREA ✓ ✓
ARC
LOLLIPOP ✓ ✓ ✓
WATERFALL ✓ ✓
BOX ✓ ✓
CANDLESTICK ✓
BULLET ✓ ✓
GANTT
GROUPED_BAR ✓ ✓ ✓
STACKED_BAR ✓ ✓ ✓
POPULATION_PYRAMID ✓ ✓
HEATMAP
CHORD
SINGLE_AXIS ✓
EFFECT_SCATTER ✓ ✓ ✓ ✓ ✓ ✓
FUNNEL ✓
BUMP
STREAMGRAPH
BEESWARM ✓ ✓
VIOLIN ✓ ✓
RIDGELINE
NIGHTINGALE
POLAR_BAR
POLAR
RADAR
GAUGE
PARALLEL
SPAN_CHART ✓
CALENDAR_HEATMAP
CORRPLOT
PUNCHCARD
MARIMEKKO
SUNBURST
TREE
TREEMAP
ARC_DIAGRAM
GRAPH
SANKEY
RADIALBAR
BARBS
CONTOUR
CONTOURF
TRICONTOUR
TRICONTOURF
KDE
RUG
TRIPLOT
TRIPCOLOR
ECDF
IMSHOW
PCOLORMESH
EVENTPLOT

Current totals: SVG tooltips 15/55, data labels 9/55, annotations 4/55, log-x 4/55, log-y 3/55, horizontal variants 7/55, and row-level encoded color/size 3/55. These denominators are inventory counts, not coverage goals.

Column boundaries

  • SVG tooltip means datum-level <title> content when Theme.svg_tooltips is enabled. POINT and EFFECT_SCATTER also require tooltips=True on the mark.
  • Data label combines Plot.encode(labels=...) for point-like marks and Theme.show_data_labels for categorical value labels.
  • annotate_* means the shared data-coordinate overlays: reference lines, areas, bands, points, arrows, and best-fit lines.
  • Log x/y means Plot.scale_x_log()/scale_y_log() for standalone rendering. Layered log scales are a separate limitation.
  • Horizontal option means an explicit horizontal=True variant, not a chart whose only meaningful layout is already horizontal.
  • Encoded color/size means the row-level color, color_categories, color_map, and size channels on Plot.encode(). Mark-specific color arguments and series palettes do not count.

Gap triage

Use three outcomes when reviewing an empty cell:

  1. Implement — the behavior has a clear meaning and fits the mark's existing renderer/data model.
  2. Reject explicitly — the public setting can reach the mark but is silently ignored; add validation with a useful error.
  3. Not applicable — the feature has no coherent meaning for the mark; record that decision here rather than manufacturing parity.

Likely implementation batches, in useful order:

  1. Audit silently ignored shared flags and make unsupported combinations fail clearly. This improves every empty cell without pretending every cell should become supported.
  2. Finish SVG tooltips for categorical marks whose renderer already has a clear datum boundary, then assess the polar family separately.
  3. Assess opt-in value labels for the remaining categorical marks. Prefer marks that already use the shared categorical frame and label-layout machinery.
  4. Treat encoded color/size as a data-model project, not a renderer-by-renderer checkbox. Many marks need series-, node-, cell-, or segment-level semantics rather than point channels.
  5. Keep annotations and logarithmic scales scoped to continuous Cartesian marks unless a concrete workflow establishes semantics for another coordinate system.
  6. Add horizontal variants only when orientation changes the analytical task; do not use 55/55 parity as a goal.

Maintenance checklist

  • Compare the row count and order with dataviz/mark.mojo and Mark.COUNT.
  • Confirm positive cells in renderer code and tests; do not infer support from a parameter merely existing on Theme or Plot.
  • Link each accepted gap to a focused GitHub issue before implementation.
  • Update this page in the same release that changes capability coverage.
  • Periodically revisit "not applicable" decisions when real workflows provide a better semantic model.

Related tracking: issue #213.

Clone this wiki locally