Dataface Tasks

Support bar-line combo charts (mixed marks per Y series)

IDDFT_CORE-SUPPORT_BAR_LINE_COMBO_CHARTS_MIXED_MARKS_PER_Y_SERIES
Statusnot_started
Priorityp2
Milestonem2-internal-adoption-design-partners
Ownersr-engineer-architect

Problem

Finance and ops dashboards often need one categorical or temporal x with multiple quantitative columns where some series are bars (e.g. actuals) and others are lines (e.g. target or plan). Dataface should support this without raw Vega-Lite for every chart. Vega-Lite already models this as a layered spec with a different mark per layer sharing the same x and y scale; our YAML should stay a thin wrapper per dataface/core/render/chart/DESIGN.md. Today dataface/core/render/chart/vega_lite_types.py _generate_layered_spec applies one chart_type to every layer for bar (and similar) multi-y charts, so bar+line is not expressible in first-class YAML.

Context

  • Reference UX: combo chart with bars for one measure and a line (with points / optional value labels) for another on the same x and y scale (e.g. ARR vs target).
  • Renderer: multi-y path uses build_layered_series_spec_generate_layered_spec in dataface/core/render/chart/standard_renderer.py and dataface/core/render/chart/vega_lite_types.py; non-line/area types currently reuse one mark.type for every layer.
  • Compile/normalizer: new fields must flow through to ResolvedChart (and schema/docs) without chart-layer aggregation; query still returns one row per x with all columns present.
  • Acceptance: Documented YAML example; tests (spec snapshot or SVG regression) for bar+line on shared scales; legend distinguishes bar vs line series. Optional second phase: point value labels like the reference chart.

Possible Solutions

Recommended: Extend multi-y charts with an explicit per-metric mark map (e.g. y_marks or series_marks) alongside type bar and y list; unspecified metrics default to the chart type. Compile into ResolvedChart; teach the layered spec builder to emit bar layers for some metrics and line (optionally with point) for others; single shared quantitative y-scale by default. Alternative: Dedicated type combo with an ordered list of field plus mark. Escape hatch: issue-197 raw Vega-Lite only if we reject first-class schema. Follow-ups: Line point labels via Vega-Lite text encoding; dual y-axis only if a concrete use case requires it.

Plan

  1. Define the authored schema for per-series mark overrides and default behavior.
  2. Thread the new field through compile types and normalized chart structures.
  3. Update layered Vega-Lite generation and add regression coverage for mixed marks.
  4. Document the YAML pattern and validate legend, labels, and shared-scale behavior.

Implementation Progress

QA Exploration

  • [ ] QA exploration completed (or N/A for non-UI tasks)

Review Feedback

  • [ ] Review cleared