Support bar-line combo charts (mixed marks per Y series)
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_specindataface/core/render/chart/standard_renderer.pyanddataface/core/render/chart/vega_lite_types.py; non-line/area types currently reuse onemark.typefor 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
- Define the authored schema for per-series mark overrides and default behavior.
- Thread the new field through compile types and normalized chart structures.
- Update layered Vega-Lite generation and add regression coverage for mixed marks.
- 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