Skip to content

게이지 ​

renderGauge는 min과 max 사이의 호 위에 값 하나를 그립니다. 임계 구간(밴드)과 바늘 또는 진행 표시를 함께 쓸 수 있습니다. CPU 부하나 SLA 목표처럼 범위가 정해진 실시간 지표 하나를 보여 줄 때 씁니다.

라이브 예제

기본 사용법 ​

ts
import { Charturbo } from 'charturbo';

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

sdk.renderGauge(
  { value: 72 },
  {
    title: 'CPU 부하',
    min: 0,
    max: 100,
    label: 'CPU',
    format: '.0f',
    bands: [
      { from: 0, to: 60, status: 'good' },
      { from: 60, to: 85, status: 'warning' },
      { from: 85, to: 100, status: 'critical', label: '과부하' },
    ],
  }
);
sdk.enableNodeInteractions(canvas, { autoRender: true });
sdk.render();

시그니처:

ts
renderGauge(data: GaugeChartData, options?: GaugeChartOptions): { bandCount: number }

데이터 형식 ​

ts
interface GaugeChartData {
  value: number; // NaN = 값 없음; [min, max] 밖의 값은 양 끝에 고정
}

범위나 밴드가 잘못되면 예외를 던집니다.

옵션 ​

옵션타입기본값설명
minnumber0범위 시작.
maxnumber100범위 끝.
bandsGaugeBandOptions[]값 단위의 임계 구간. 범위에 맞게 잘리고, 겹치면 나중에 시작하는 밴드가 우선합니다.
indicator'needle' | 'progress'밴드가 있으면 'needle', 없으면 'progress'바늘, 또는 값까지 채운 호.
startAnglenumber-120호 시작 각도(12시 방향에서 시계 방향, 도).
endAnglenumber120호 끝 각도(12시 방향에서 시계 방향, 도).
thicknessnumber0.2반지름 대비 링 두께 비율.
bandLabelsboolean밴드에 label이나 status가 있으면 true밴드 옆 라벨.
showMinMaxbooleantrue호 양 끝의 최소 / 최대 라벨.
labelstring값 아래 캡션(단위나 지표 이름).
trackColorColorInput테마 그리드 색채워지지 않은 호의 색.
colorColorInput팔레트 첫 색값이 어떤 밴드에도 속하지 않을 때의 진행 색.
needleColorColorInput테마 기본 텍스트 색바늘 색.
formatChartValueFormat로케일 숫자값, 최소, 최대 텍스트 형식(형식 문자열, Intl 옵션, 함수). 숫자·날짜 형식 참고.
valueLabelstring'값' (로캘별)툴팁과 데이터 표에서 값의 이름.
titlestring차트 제목.
descriptionstring캔버스의 접근성 이름.
paddingChartPaddingOptions자동플롯 여백(CSS px).

게이지에는 범례가 없습니다.

밴드 ​

ts
interface GaugeBandOptions {
  from: number;
  to: number;
  status?: 'good' | 'warning' | 'serious' | 'critical'; // 예약된 상태 색 + 아이콘 + 라벨
  color?: ColorInput;  // 기본: 상태 색, 없으면 테마 팔레트 슬롯
  label?: string;      // 밴드 옆과 툴팁에 표시(기본: 상태 이름)
}

상태 색은 예약되어 있어 테마를 따르지 않습니다. 상태는 항상 아이콘과 라벨을 함께 표시하므로 색만으로 의미를 전달하지 않습니다.

상태색아이콘기본 라벨
good#0ca30c✓양호 (로캘별)
warning#fab219▲주의 (로캘별)
serious#ec835a◆심각 (로캘별)
critical#d03b3b✖위험 (로캘별)

status 없이 color만 준 밴드는 일반 밴드입니다.

값 갱신 ​

ts
setGaugeValue(value: number): boolean

setGaugeValue는 현재 게이지를 새 값으로 옮깁니다. 밴드 형상과 라벨 배치는 그대로 두고 바늘(또는 진행 호)과 중앙 값 텍스트만 바꿉니다. 호출 후 render()를 부릅니다. 게이지가 없거나 값이 무한대이면 false를 반환합니다.

ts
setInterval(() => {
  sdk.setGaugeValue(Math.random() * 100);
  sdk.render();
}, 1000);

값 변경에는 애니메이션이 없습니다.

상호작용 ​

enableNodeInteractions(canvas)를 호출하면 켜집니다. 링 위를 hover하면 포인터 아래 밴드를, 안쪽을 hover하면 값을 보여 줍니다. 브러시, 줌, 팬은 비활성입니다.

툴팁 컨텍스트(툴팁과 hover 참고):

ts
// ctx.chartType === 'gauge'
// ctx.index: 0 = 값, 1 + k = 밴드 k (밴드는 `from` 순으로 정렬)
// ctx.gauge = { value, min, max, band?: { label, from, to, status? } }

데이터 포인트 id: 0 = 값, 1 + k = 그리는 순서의 밴드 k.

참고 사항 ​

  • 호 · 밴드 · 트랙 테셀레이션(밴드 사이 2px 간격, 안티앨리어싱된 가장자리), 밴드 자르기와 정렬, 값이 속한 밴드, 바늘, hit 테스트, 라벨 앵커는 엔진(Rust)에서 계산합니다.
  • 접근성: 요약(값, 상태, 범위), 데이터 표(값, 밴드별 From–To), 좌우 화살표로 값에서 밴드들로 이동. 접근성 참고.

함께 보기 ​

MIT License