통합 시각화 엔진. 차트·다이어그램을 하나의 패키지에서 관리한다.
from dartlab.viz import emit_chart, emit_diagram
emit_chart({
"chartType": "line",
"title": "삼성전자 매출",
"categories": ["2022", "2023", "2024"],
"series": [{"name": "매출", "data": [302.2, 258.9, 300.9]}],
})
emit_diagram("mermaid", "graph LR\n 매출-->영업이익-->FCF")viz 는 헬퍼 엔진. 별도 노트북 없이 다른 분석 노트북 내에서 emit_chart 호출.
| 항목 | 내용 |
|---|---|
| 레이어 | 교차 관심사 (guide/와 동일 위치) |
| 진입점 | dartlab.viz, emit_chart(), emit_diagram() |
| 소비 | Company(finance, docs), analysis(insight), AI runtime |
| 생산 | review(ChartBlock), AI(CHART 이벤트), Jupyter(Plotly Figure) |
| 프로토콜 | VizSpec (ChartSpec JSON 100% 하위호환) |
기존 ChartSpec JSON과 동일. vizType 필드로 chart/diagram 분기.
{
"chartType": "combo|bar|line|radar|waterfall|heatmap|sparkline|pie",
"title": "str",
"series": [{"name": "str", "data": [number], "color": "str", "type": "bar|line"}],
"categories": ["str"],
"options": {"unit": "str", "stacked": bool},
"meta": {"source": "str", "stockCode": "str", "corpName": "str"}
}diagram일 때: {"vizType": "diagram", "diagramType": "mermaid", "source": "...", "title": "..."}
AI 코드 실행 → emit_chart() → stdout 마커 → extract_viz_specs() → CHART 이벤트 → SSE → 클라이언트
emit_chart(spec)— ChartSpec dict를 stdout 마커로 출력emit_diagram(type, source)— 다이어그램 소스를 stdout 마커로 출력extract_viz_specs(stdout)— 마커 추출 + 텍스트 정제AnalysisEvent("chart", {"charts": [spec]})— SSE로 전달
| 함수 | chartType | 소스 |
|---|---|---|
spec_revenue_trend |
combo | IS annual |
spec_cashflow_waterfall |
waterfall | CF annual |
spec_balance_sheet |
bar (stacked) | BS annual |
spec_profitability |
line | ratioSeries |
spec_dividend |
combo | report.dividend |
spec_insight_radar |
radar | insights |
spec_ratio_sparklines |
sparkline | ratioSeries |
spec_diff_heatmap |
heatmap | diff() |
| 대상 | 방식 |
|---|---|
| VSCode Extension | SSE chart 이벤트 → Svelte ChartRenderer (SVG) |
| Web UI (SPA) | SSE chart 이벤트 → Svelte ChartRenderer (SVG) |
| Jupyter/Marimo | VizSpec.toPlotly() → Plotly Figure |
| Review (터미널) | [chart: title] 플레이스홀더 |
| Review (HTML) | <div class="dl-chart" data-spec='...'/> |
| Review (JSON) | spec dict 그대로 |
8색. Python viz/palette.py + JS ui/shared/chart/colors.ts 동일 값 유지.
| 경로 | 역할 |
|---|---|
src/dartlab/viz/__init__.py |
공개 API (emit_chart, emit_diagram, VizSpec, COLORS, auto_chart, ...) |
src/dartlab/viz/spec.py |
VizSpec dataclass |
src/dartlab/viz/palette.py |
COLORS 단일 원천 |
src/dartlab/viz/plotly.py |
ChartSpec → Plotly Figure 변환 |
src/dartlab/viz/extract.py |
AI stdout 마커 추출 |
src/dartlab/viz/generators.py |
Company → ChartSpec 8종 |
src/dartlab/viz/charts/ |
DataFrame → Plotly Figure (line, bar, pie, waterfall, revenue, ...) |
src/dartlab/review/blocks.py |
ChartBlock 타입 |
ui/shared/chart/ |
Svelte SVG 차트 컴포넌트 (source of truth, web/vscode 공유) |