본문으로 건너뛰기

Chart

HandStack은 Highcharts와 Chart.js를 서로 독립된 UI 컨트롤로 제공합니다. 두 컨트롤은 엔진의 원형 옵션을 보존하면서 $auigrid/$grid에서 얻는 {} 또는 [{}] 행 데이터와 동일한 선택/거래 계약을 사용합니다. Apache ECharts는 별도 ECharts 문서를 참고하세요.

엔진태그싱글턴벤더
HighChart<syn_chart>syn.uicontrols.$chartHighcharts 11.4.8
ChartJS<syn_chartjs>syn.uicontrols.$chartjsChart.js 4.4.1 UMD

공통 데이터 계약

const rows = [
{ YEAR: '2025', AMOUNT: 120, PROFIT: 30 },
{ YEAR: '2026', AMOUNT: 180, PROFIT: 48 }
];

await syn.uicontrols.$chart.setValue('chtHigh', rows);
await syn.uicontrols.$chartjs.setValue('chtJs', rows);

단일 객체는 1행 배열로 정규화됩니다. null, undefined, []는 차트를 비우고 숫자·문자열이나 객체가 아닌 배열 항목은 거부합니다. 기본 추론은 첫 문자열/날짜 컬럼(없으면 첫 컬럼)을 category/label로, 숫자 컬럼을 series/dataset으로 사용합니다.

point를 클릭하면 선택 상세와 원본 행의 연결이 저장됩니다.

const detail = syn.uicontrols.$chart.getSelection('chtHigh');
// [{ series, point, yData, rowIndex, row }]

const row = syn.uicontrols.$chart.getValue('chtHigh');
const transactionList = syn.uicontrols.$chart.getValue('chtHigh', 'List', metaColumns);
// [[{ prop: 'YEAR', val: '2025' }, ...]]

selectionModesingle, multiple, native, none을 지원합니다. getValue(id)는 single이면 최근 선택 행 또는 null, multiple/native이면 중복 제거된 선택 행 배열입니다. getValue(id, 'Row'|'List', metaColumns)는 HandStack transaction 형식을 반환합니다.

이 선택 상태는 데이터 반환용이며 컨트롤이 point에 포커스나 선택 테두리를 자동으로 그리지 않습니다. HighChart는 allowPointSelect/point.select()/selectPoint, ChartJS는 setActiveElements나 사용자 plugin을 화면 개발자가 명시적으로 사용할 때만 네이티브 시각 상태가 바뀝니다.

HighChart 빠른 시작

<syn_chart id="chtHigh" syn-events="['pointClick','selectionChange']"
style="width:100%;height:360px" syn-options="{
selectionMode: 'multiple',
option: { chart: { type: 'column' }, title: { text: '매출' } }
}"></syn_chart>

HighChart는 option에 Highcharts 원형 옵션을 받습니다. 이전 화면의 최상위 chart, title, xAxis, series 형식과 setValue([{name,data}])도 호환합니다. 최상위 option은 whitelist 없이 전달되므로 colorAxis, mapView, data, responsive 등도 그대로 사용할 수 있습니다. constructorTypestockChart, mapChart, ganttChart로 지정하거나 series/기술 지표 type을 설정하면 필요한 로컬 모듈을 /lib/highcharts/에서 의존 순서로 지연 로드합니다. chart.styledMode: true는 로컬 css/highcharts.min.css도 준비합니다.

Sankey, networkgraph, Stock/Maps/Gantt처럼 행 추론만으로 표현할 수 없는 데이터는 dataAdapter(rows, metaColumns, currentOption, control)가 다음 형태를 반환하게 합니다.

return {
option: { series: [{ type: 'sankey', data: links }] },
rowIndexMap: [[0, 1, 2]],
selectionResolver(point) { return point.isNode ? null : point.index; }
};

Highcharts Maps의 지도 GeoJSON과 외부 플러그인은 자동 포함하지 않으므로 registerMap 등으로 등록합니다.

공식 Highcharts 데모의 생성자와 option을 그대로 옮기려면 renderChart를 사용합니다. rows는 차트 option과 별도로 point 선택 시 반환할 원본 행입니다.

await syn.uicontrols.$chart.renderChart('chtHigh', {
constructorType: 'stockChart',
rows,
option: {
series: [
{ type: 'ohlc', id: 'price', data: ohlcData },
{ type: 'sma', linkedTo: 'price' }
]
},
selectionResolver(point, event, sourceRows) {
return sourceRows.findIndex(row => row.DATE === point.x);
}
});

Core, More, 3D, Gauge, Heatmap, Tree/Network, 특수 series, Stock, Maps, Gantt와 운영 API는 기능군별 독립 예제에서 확인할 수 있습니다. Highcharts Dashboards와 Grid는 별도 제품 런타임이므로 $chart 지원 범위가 아닙니다.

ChartJS 빠른 시작

<syn_chartjs id="chtJs" syn-events="['pointClick','selectionChange']"
style="width:100%;height:360px" syn-options="{
type: 'bar', selectionMode: 'multiple',
options: { scales: { y: { beginAtZero: true } } }
}"></syn_chartjs>

ChartJS는 Chart.js의 type, data, options, plugins를 그대로 받습니다. 기존 labelID/series[{columnID,label,...}] 매핑도 유지합니다. scatter/bubble처럼 {x,y,r}가 필요한 데이터는 dataAdapter{config,rowIndexMap,selectionResolver}를 반환하게 합니다.

Chart.js UMD 번들의 기본 controller/element/scale/plugin은 모두 사용할 수 있습니다. 외부 플러그인과 사용자 controller는 register/unregister로 명시적으로 등록합니다.

주요 메서드

메서드설명
setValue(id,value,metaColumns)객체/객체 배열 반영. Promise 반환
renderChart(id,descriptor), recreate공식 데모 option 반영과 chart/stock/map/gantt 생성자 전환
getValue, getRawValue, getSelection, getSelectedRows선택 행·원본 행·선택 상세 조회
setSelection, clearSelection선택 설정/해제
getControl, getChartInstanceHandStack wrapper와 엔진 인스턴스 조회
resize, setControlSize, showLoading, hideLoading표시 상태 제어
update, setData, setExtremes, addAnnotation, drillUpchart/series/axis/annotation 제어
invoke(id,target,method,args)Highcharts 공개 인스턴스 API 범용 호출
clear, dispose, getDataURL, toImage수명주기와 이미지 내보내기

HighChart의 기존 getChartControl(id)은 Highcharts 인스턴스를, ChartJS의 기존 메서드는 wrapper를 반환합니다. 엔진 인스턴스를 동일하게 얻으려면 두 컨트롤 모두 getChartInstance(id)을 사용합니다. 엔진별 전체 wrapper는 HighChart APIChartJS API에 정리되어 있습니다.

이벤트

핸들러 형식은 (elID, params, selections)입니다. 공통 합성 이벤트는 initialized, recreated, dataBound, selectionChange, resized, disposed, error입니다. HighChart는 chart/series/point/axis의 원형 이벤트를 syn-events로 중계하며 원래 콜백과 반환값도 보존합니다. 전체 이벤트 이름은 HighChart API를 참고합니다.

실행 예제

  • HighChart: 예제 목차에서 Core, 고급 기능, 계층·관계, 특수 series, Stock, Maps, Gantt, 데이터·운영 API를 독립 페이지로 실행
  • ChartJS: chartjsbasic.html(자동 추론/선택), chartjsevents.html(native+HandStack 이벤트), griddashboard.html(AUIGrid), chartjsadapter.html(Bubble)