관리자 대시보드
지표명, 큰 숫자, 전월 대비 증감, 기준선까지. 카드 하나로 KPI 화면이 끝납니다.
createChart('#sales', {
type: 'bar', title: '월별 매출',
value: 48250000, prefix: '₩ ', delta: 18.2,
scale: 1e6, unit: '백만원',
data,
});아래 차트는 모두 실제로 동작합니다. 올려 보고, 범례를 눌러 보고, 방문자 차트는 끌어서 확대해 보세요.
지표명, 큰 숫자, 전월 대비 증감, 기준선까지. 카드 하나로 KPI 화면이 끝납니다.
createChart('#sales', {
type: 'bar', title: '월별 매출',
value: 48250000, prefix: '₩ ', delta: 18.2,
scale: 1e6, unit: '백만원',
data,
});"단위: 백만원"과 콤마 숫자. 내보내기 메뉴에서 PNG·SVG·CSV로 바로 내려받습니다.
createChart('#report', {
type: 'line', footnote: '단위: 백만원',
scale: 1e6, unit: '백만원',
data,
});상품 TOP 10은 가로 막대, 결제 수단은 도넛, 일별 매출은 막대와 선 콤보.
createChart('#top', {
type: 'bar', horizontal: true,
dataLabels: true, unit: '개',
data,
});DOM 없이 SVG 문자열을 만듭니다. Cloudflare Workers, Node, Astro에서 OG 이미지나 메일 본문으로.
import { renderToSVG } from '@82chart/core';
const svg = renderToSVG(options, {
width: 1200, height: 630,
});// Chart.●s: 만·억 단위는 직접 만들어야 합니다
scales: { y: { ticks: { callback: (v) =>
v >= 1e8 ? (v / 1e8).toFixed(1) + '억'
: v >= 1e4 ? (v / 1e4).toFixed(0) + '만'
: v.toLocaleString() } } }// 82chart: 한국어 페이지라면 기본값
createChart('#el', { type: 'bar', unit: '원', data });
// 축 0원 · 1,500만원 · 3,000만원 · 4,500만원
// 툴팁 48,250,000원To●●t UI Chart는 2026년 9월 저장소가 보관되어 더 고쳐지지 않습니다. labels와 series 모양이 비슷해서 데이터는 거의 그대로 옮겨집니다.
<link rel="stylesheet" href="https://uicdn.toast.com/chart/latest/to●●tui-chart.min.css">
<script src="https://uicdn.toast.com/chart/latest/to●●tui-chart.min.js"></script>
<div id="chart"></div>
<script>
// columnChart = vertical bars (barChart is horizontal there)
const chart = to●●tui.Chart.columnChart({
el: document.getElementById('chart'),
data: {
categories: ['1월', '2월', '3월'],
series: [{ name: '매출', data: [32000000, 41000000, 38500000] }],
},
options: { chart: { title: '월별 매출', width: 600, height: 400 }, yAxis: { title: '원' } },
});
</script><link rel="stylesheet" href="https://82chart.com/cdn/v0.1.0/82chart.css">
<script src="https://82chart.com/cdn/v0.1.0/82chart.min.js"></script>
<div id="chart"></div>
<script>
const chart = Chart82.createChart('#chart', {
type: 'bar',
title: '월별 매출',
unit: '원',
height: 400,
data: {
labels: ['1월', '2월', '3월'],
series: [{ name: '매출', data: [32000000, 41000000, 38500000] }],
},
});
</script>const chart = new Apex●●●rts(document.querySelector('#chart'), {
chart: { type: 'line', height: 350, zoom: { enabled: true } },
series: [{ name: 'Visitors', data: [120, 180, 150, 220] }],
xaxis: { categories: ['Mon', 'Tue', 'Wed', 'Thu'] },
yaxis: { labels: { formatter: (v) => v.toLocaleString() } },
});
chart.render();const chart = createChart('#chart', {
type: 'line',
height: 350,
zoom: true,
numberFormat: 'comma',
data: {
labels: ['Mon', 'Tue', 'Wed', 'Thu'],
series: [{ name: 'Visitors', data: [120, 180, 150, 220] }],
},
});<canvas id="chart"></canvas>
<script>
new Chart(document.getElementById('chart'), {
type: 'bar',
data: { labels: ['1월', '2월', '3월'], datasets: [{ label: '매출', data: [12, 19, 14] }] },
});
</script><div id="chart"></div>
<script>
Chart82.createChart('#chart', {
type: 'bar',
data: { labels: ['1월', '2월', '3월'], series: [{ name: '매출', data: [12, 19, 14] }] },
});
</script><link rel="stylesheet" href="https://82chart.com/cdn/v0.1.0/82chart.css">
<script src="https://82chart.com/cdn/v0.1.0/82chart.min.js"></script>
<div id="chart"></div>
<script>
Chart82.createChart('#chart', {
type: 'bar',
title: '월별 매출',
unit: '원',
data: {
labels: ['1월', '2월', '3월', '4월', '5월', '6월'],
series: [{ name: '매출', data: [32000000, 41000000, 38500000, 52000000, 61000000, 58000000] }],
},
});
</script>import { createChart } from '@82chart/core';
import '@82chart/core/styles.css';
const chart = createChart('#chart', {
type: 'bar',
title: '월별 매출',
unit: '원',
data: {
labels: ['1월', '2월', '3월', '4월', '5월', '6월'],
series: [{ name: '매출', data: [32000000, 41000000, 38500000, 52000000, 61000000, 58000000] }],
},
});
chart.on('click', (point) => console.log(point.x, point.y));import { Chart82 } from '@82chart/react';
import '@82chart/core/styles.css';
const data = {
labels: ['1월', '2월', '3월', '4월', '5월', '6월'],
series: [{ name: '매출', data: [32000000, 41000000, 38500000, 52000000, 61000000, 58000000] }],
};
export function SalesChart() {
return (
<Chart82
type="bar"
data={data}
options={{ title: '월별 매출', unit: '원' }}
onClick={(point) => console.log(point)}
/>
);
}<script setup>
import { Chart82 } from '@82chart/vue';
import '@82chart/core/styles.css';
const data = {
labels: ['1월', '2월', '3월', '4월', '5월', '6월'],
series: [{ name: '매출', data: [32000000, 41000000, 38500000, 52000000, 61000000, 58000000] }],
};
const options = { title: '월별 매출', unit: '원' };
</script>
<template>
<Chart82 type="bar" :data="data" :options="options" @click="(p) => console.log(p)" />
</template><script>
import { Chart82 } from '@82chart/svelte';
import '@82chart/core/styles.css';
const data = {
labels: ['1월', '2월', '3월', '4월', '5월', '6월'],
series: [{ name: '매출', data: [32000000, 41000000, 38500000, 52000000, 61000000, 58000000] }],
};
</script>
<Chart82 type="bar" {data} options={{ title: '월별 매출', unit: '원' }} />import { Component } from '@angular/core';
import { Chart82Component } from '@82chart/angular';
import type { ChartData, ChartOptions, ChartPoint } from '@82chart/core';
@Component({
selector: 'app-sales',
standalone: true,
imports: [Chart82Component],
template: `<chart-82 type="bar" [data]="data" [options]="options" (pointClick)="onPoint($event)"></chart-82>`,
})
export class SalesComponent {
data: ChartData = {
labels: ['1월', '2월', '3월', '4월', '5월', '6월'],
series: [{ name: '매출', data: [32000000, 41000000, 38500000, 52000000, 61000000, 58000000] }],
};
options: Partial<ChartOptions> = { title: '월별 매출', unit: '원' };
onPoint(p: ChartPoint) { console.log(p); }
}
// angular.json → "styles": ["node_modules/@82chart/core/dist/styles.css"]<link rel="stylesheet" href="https://82chart.com/cdn/v0.1.0/82chart.css">
<script src="https://82chart.com/cdn/v0.1.0/82chart.min.js"></script>
<chart-82
type="bar"
title="월별 매출"
unit="원"
data='{"labels":["1월","2월","3월"],"series":[{"name":"매출","data":[32000000,41000000,38500000]}]}'
></chart-82>네. MIT 라이선스라 상업용 사이트, 사내 시스템, 납품하는 프로젝트 어디에나 무료입니다. 라이선스 키, 워터마크, 매출 기준, 유료 등급이 없습니다. 라이선스 문구만 함께 두면 됩니다.
아니요. 최신 Chrome, Edge, Safari, Firefox, 삼성 인터넷과 그 모바일 브라우저를 지원합니다. IE11은 마이크로소프트도 지원을 끝냈고, 82chart가 쓰는 SVG·ResizeObserver 기능이 없습니다.
82chart.min.js 가 gzip 으로 약 30KB, CSS가 약 3KB입니다. 의존성이 없어서 날짜 라이브러리나 jQuery를 따로 받지 않습니다.
아무것도 하지 않아도 됩니다. 페이지가 한국어(<html lang="ko">)이거나 language: 'ko' 면 축은 1.2만·3.4억, 툴팁은 쉼표가 든 전체 숫자입니다. 보고서처럼 "단위: 백만원"을 쓰려면 scale: 1000000, unit: '백만원' 입니다.
단위가 다른 두 값(매출과 주문 수)을 한 그림에 겹치면, 두 축의 범위를 어떻게 잡느냐에 따라 같은 데이터가 "함께 오른다"로도 "엇갈린다"로도 보입니다. 차트가 가장 자주 잘못 읽히는 경우라서 이번 버전에는 넣지 않았습니다. 같은 x를 공유하는 차트 두 개를 위아래로 놓고 group 으로 크로스헤어를 묶는 방법을 권합니다. 다음 버전에서 경고 문서와 함께 직접 켜는 옵션으로 넣을 계획입니다.
수천 개까지는 SVG로 부드럽게 그립니다. 수만 개 이상(센서 로그 등)은 지금은 미리 묶어서(분·시간 평균) 넘기세요. 많은 점을 위한 Canvas 렌더러는 이후 버전 계획에 있습니다.
코어에는 없습니다. 캔들과 거래량, 이동평균 같은 지표는 코어 위에 얹는 별도 패키지(@82chart/stock)로 준비하고 있습니다.
아니요. 차트 데이터와 방문자 정보는 보내지 않습니다. 하루 한 번 차트가 실행된 도메인과 버전만 82chart.com에 알리며, telemetry: false 로 끌 수 있습니다. localhost, 사내 주소, IP 주소에서는 보내지 않습니다.
네. To●●t UI Chart 저장소는 2026년 9월에 보관(archived) 처리되어 더 이상 고쳐지지 않습니다. 82chart는 같은 한국형 쓰임새(만·억 단위, 한글 라벨, 관리자 대시보드)를 목표로 하고, 옵션 대응표는 To●●t UI Chart에서 옮기기에 있습니다.
Apex●●●rts는 5.0부터 MIT가 아닌 라이선스로 바뀌었고, Chart.●s는 확대나 주석을 별도 플러그인으로 붙여야 합니다. 82chart는 확대, 크로스헤어, 주석, PNG·SVG·CSV 내보내기, 만·억 단위가 MIT 코어에 모두 들어 있습니다. 자세한 비교는 비교 페이지에 있습니다.
가입도 키도 필요 없습니다. 회사 사이트도 무료입니다.
시작하기