Skip to content

콤보 ​

콤보 차트는 막대, 선, 영역 시리즈를 한 플롯에 그립니다. 시리즈는 카테고리 축 또는 x축을 함께 쓰고, 선택적인 오른쪽 y축에 두 번째 단위를 둘 수 있습니다. 매출 막대와 목표 선처럼 함께 봐야 하는 지표에 씁니다.

라이브 예제

기본 사용법 ​

ts
import { Charturbo } from 'charturbo';

const canvas = document.querySelector('canvas')!;
const sdk = await Charturbo.create(canvas);

sdk.renderComboChart(
  {
    categories: ['1월', '2월', '3월', '4월'],
    series: [
      { name: '온라인', type: 'bar', values: [12, 18, 22, 19] },
      { name: '매장', type: 'bar', values: [8, 9, 7, 11] },
      { name: '목표', type: 'area', values: [18, 22, 26, 28] },
      { name: '마진 %', type: 'line', yAxis: 'right', values: [21, 24, 23, 27],
        marker: true, dash: [5, 3], curve: 'monotone' },
    ],
  },
  {
    barMode: 'stacked',
    title: '매출과 마진',
    axes: { x: { title: '월' }, y: { title: '매출', min: 0 }, y2: { title: '%', format: (v) => `${v}%` } },
  }
);
sdk.enableNodeInteractions(canvas, { autoRender: true });
sdk.render();
ts
renderComboChart(
  data: ComboChartData,
  options?: ComboChartOptions
): { seriesCount: number; categoryCount: number; pointCount: number }

데이터 포인트 id = series * categories + category.

데이터 형식 ​

ComboChartData:

필드타입설명
categoriesstring[]카테고리 x축의 카테고리 라벨.
xFloat64Array | number[] | Date[]또는 각 카테고리의 숫자 / 시간 x: 엄격하게 증가해야 하며, 시간이면 epoch ms 또는 Date[].
seriesComboSeriesDescriptor[]모든 시리즈는 카테고리마다 값 하나를 가집니다.

ComboSeriesDescriptor:

필드타입기본값설명
namestring—범례와 툴팁에 쓰는 이름.
type'bar' | 'line' | 'area'—'area'는 0까지 반투명하게 채운 선입니다.
valuesFloat32Array | number[]—카테고리마다 값 하나. NaN / null = 결측.
yAxis'left' | 'right''left''right' 시리즈가 하나라도 있으면 오른쪽 y축(axes.y2)을 추가합니다. 모든 막대 시리즈는 첫 막대 시리즈의 축을 함께 씁니다.
colorColorInput테마 팔레트시리즈 색.
lineWidthnumber차트 lineWidth선 / 영역 시리즈의 선 두께(CSS px).
marker, dash, curve, nulls선 스타일—선 / 영역 시리즈는 선 스타일을 받습니다.

숫자 또는 시간 x를 쓰면 막대 슬롯 너비는 가장 작은 x 간격이고(막대는 겹치지 않으며 막대 하나는 그 72%), x 눈금은 선 차트와 같은 숫자 / 달력 눈금입니다.

옵션 ​

ComboChartOptions:

옵션타입기본값설명
barMode'grouped' | 'stacked' | 'percent''grouped'막대 시리즈의 배치.
axes{ x?: ComboXAxisOptions; y?: ComboYAxisOptions; y2?: ComboYAxisOptions }—아래 참고.
titlestring—차트 제목.
descriptionstring—캔버스의 접근성 이름.
legendChartLegendOptions | boolean시리즈 2개 이상이면 표시클릭하면 토글하고(막대를 다시 쌓음), hover하면 강조합니다.
groupGapnumber0.28각 카테고리 슬롯에서 막대 그룹 사이에 비우는 비율.
barGapnumber2그룹 막대 사이 또는 누적 구간 사이 간격(CSS px).
cornerRadiusnumber4막대 끝 둥글기(CSS px).
fillOpacitynumber0.2영역 시리즈의 채우기 알파 배수.
lineWidthnumber2선 / 영역 시리즈의 선 두께(CSS px).
nulls'gap' | 'connect' | 'zero''gap'선 / 영역 시리즈의 결측 샘플 처리. 시리즈 nulls가 우선합니다.
hoverChartHoverStyle—hover 스타일.
showBackdropGridbooleantrue가로 그리드 선과 기준선.
gridChartGridStyle—그리드 스타일.
paddingChartPaddingOptions자동플롯 여백(CSS px).
localestringSDK 로케일기본 숫자 / 시간 라벨의 로케일.
timeZoneCharturboTimeZoneSDK 시간대시간 x축의 시간대.
widthnumber168플롯의 월드 너비.
heightnumber86플롯의 월드 높이.

축 옵션:

축필드설명
xChartAxisOptions + type?: 'numeric' | 'time'type은 명시적 x에 적용합니다: 'numeric'(기본) 또는 'time'(Date[]의 기본).
y, y2ChartAxisOptions + min?, max?, nice?도메인 끝을 고정합니다. nice(기본 true)는 데이터에서 구한 끝을 눈금 간격 단위로 넓힙니다.

배치 ​

  • 카테고리 i는 데이터 x i(또는 x[i])에 놓입니다. x 도메인은 양쪽으로 슬롯 절반씩 넓히므로, 선의 점이 막대 슬롯 중심에 정확히 놓입니다.
  • 막대 시리즈는 막대 엔진을 씁니다(그룹 / 누적 / 퍼센트, 범례 토글 시 다시 쌓기). 선과 영역 시리즈는 선 엔진을 씁니다(M4 데시메이션, 마커, 대시, 곡선, 결측 처리 방식).
  • 그리는 순서: 막대, 영역 채우기(반투명, 0까지), 선, 마커.
  • 영역은 쌓지 않습니다. 각 영역은 0까지 채웁니다.

Y 도메인 ​

  • 도메인은 고정입니다(자동 스케일 없음). 각 축은 숨긴 시리즈를 포함한 자기 시리즈 전체(누적 막대는 합계)를 덮고, nice 눈금까지 넓힙니다.
  • 막대 축과 영역 시리즈는 항상 0을 포함합니다. nulls: 'zero'로 채운 0도 도메인에 들어갑니다.
  • 끝을 고정하려면 axes.y / axes.y2의 min, max, nice를 쓰세요. 값은 getYDomain()과 getY2Domain()으로 읽습니다.
  • 모든 시리즈가 오른쪽 축에 있게 되면 왼쪽 축으로 옮깁니다.
  • 로그 스케일과 뒤집힌 스케일은 지원하지 않습니다.

주의

이중 y축은 관계없는 스케일을 비교하게 만듭니다. 두 범위를 어떻게 고르느냐만으로도 선이 막대와 "교차"하는 것처럼 보일 수 있습니다. 오른쪽 축은 단위가 다를 때만 쓰고, 두 축 모두에 라벨을 분명히 붙이세요. 먼저 같은 x를 공유하는 차트 두 개, 또는 지수화한 단일 축을 고려하세요.

hover와 범례 ​

  • hover는 index 모드를 씁니다. 툴팁 하나(chartType: 'combo')가 hover한 카테고리의 보이는 시리즈를 모두 나열합니다. 막대는 색이 진해지고, 선과 영역의 점에는 마커가 붙고, 선 시리즈가 있으면 십자선을 그립니다.
  • primary 항목은 포인터에 가장 가까운 막대 구간 또는 선의 점입니다(막대 안의 선 점이 우선). hover: { mode: 'nearest' } 또는 tooltip: { shared: false }이면 그 항목만 보여 줍니다.
  • hoverAtX(커서 동기화)는 가장 가까운 카테고리에 맞춥니다.
  • 범례 기호: 막대 = 사각형, 선 = 선분, 영역 = 위에 선이 있는 옅은 블록. 토글하면 막대를 다시 쌓거나 다시 묶습니다(도메인은 고정). 강조하면 종류와 관계없이 다른 시리즈를 모두 흐리게 합니다.

툴팁과 hover, 대시보드 동기화 참고.

줌과 팬 ​

x 줌과 팬은 휠, 드래그, 터치, setXRange로 동작합니다. 막대는 줌 창에 따라 넓어지고 플롯 영역에서 잘립니다.

콤보 차트에서 지원하지 않는 기능: 브러시, 내비게이터, 막대 데이터 라벨, 막대 오차 막대, 선 범위 밴드.

접근성 ​

요약(종류별 시리즈, 이중 축, 범위), 설명(축 제목, 시리즈별 종류 · 축 · 최댓값 · 최솟값 · 평균), 데이터 표와 CSV(행 = 카테고리, 열 = 모든 시리즈), 키보드 탐색(좌우 = 카테고리, 상하 = 시리즈)을 제공합니다. 접근성 참고.

데이터 갱신 ​

새 데이터로 renderComboChart를 다시 호출합니다.

프레임워크 ​

tsx
<CharturboChart type="combo" data={{ categories, series }} options={{ barMode: 'grouped' }} />

함께 보기 ​

MIT License