Repository navigation
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.
| 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.
-
SVG tooltip means datum-level
<title>content whenTheme.svg_tooltipsis enabled.POINTandEFFECT_SCATTERalso requiretooltips=Trueon the mark. -
Data label combines
Plot.encode(labels=...)for point-like marks andTheme.show_data_labelsfor 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=Truevariant, not a chart whose only meaningful layout is already horizontal. -
Encoded color/size means the row-level
color,color_categories,color_map, andsizechannels onPlot.encode(). Mark-specific color arguments and series palettes do not count.
Use three outcomes when reviewing an empty cell:
- Implement — the behavior has a clear meaning and fits the mark's existing renderer/data model.
- Reject explicitly — the public setting can reach the mark but is silently ignored; add validation with a useful error.
- 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:
- Audit silently ignored shared flags and make unsupported combinations fail clearly. This improves every empty cell without pretending every cell should become supported.
- Finish SVG tooltips for categorical marks whose renderer already has a clear datum boundary, then assess the polar family separately.
- Assess opt-in value labels for the remaining categorical marks. Prefer marks that already use the shared categorical frame and label-layout machinery.
- 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.
- Keep annotations and logarithmic scales scoped to continuous Cartesian marks unless a concrete workflow establishes semantics for another coordinate system.
- Add horizontal variants only when orientation changes the analytical task; do not use 55/55 parity as a goal.
- Compare the row count and order with
dataviz/mark.mojoandMark.COUNT. - Confirm positive cells in renderer code and tests; do not infer support from a
parameter merely existing on
ThemeorPlot. - 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.