대시보드 페이지를 퍼블리싱하면서 차트를 만지작 해야하는 순간이 왔다.
지난 번에는 굉장히 얕게 파악을 해서 완전 새로 다시 파보는거나 다름없던 chart.js !
이번엔 개발자분들의 도움을 받아 데이터를 뿌리면서 화면을 그리다보니
다른 부분도 좀 더 공부가 됐다😊
무튼 나중에도 수월하게 사용하기 위해 chart.js 사용법 기록하기🥸
프로젝트 특성을 고려해 cdn, install 등 상황에 맞는 방법을 적용하면 된다.
// cdn
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
차트를 넣을 영역에 canvas 태그를 넣어주시고 스크립트 태그 안에 차트를 불러온다.
반응형 작업을 위해 이미 크기가 정의된 컨테이너 안에 넣어주시면 좋다.
<div class="chartWrap">
// id 값은 원하는대로 지정해주어도 됩니다.
<canvas id="myChart"></canvas>
</div>
<script>
// 선언한 id값을 입력합니다.
const ctx = document.getElementById('myChart');
new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
차트를 그려내는 각각 옵션이 무엇을 의지하는지 정리해보기.
const ctx = document.getElementById('myChart');
new Chart(ctx, {
// 차트를 어떤 모양으로 그려낼지 정의합니다.
type: 'bar',
data: {
// 차트에 들어온 데이터 각각의 이름을 정의합니다.
// 직접 데이터를 넣어야한다면 아래와 같은 배열로 필터링해 넣어주면 됩니다.
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [
{
// 어떤 데이터를 지칭하는지 정의합니다.
label: '데이터1',
// 데이터 수치를 나타내기 위한 값들을 넣습니다.
// 직접 데이터를 넣어야한다면 아래와 같은 배열로 필터링해 넣어주면 됩니다.
data: [1,2,3,4,5,6],
// 데이터의 시각적 색상을 지정합니다.
backgroundColor: "pink",
// 데이터의 border 두께를 정합니다.
borderWidth: 3,
// border 컬러를 지정합니다.
borderColor: '#e64c65',
}
]
},
options: {
plugins: {
legend: {
// label의 노출여부를 정합니다.(기본값은 true)
display: true,
// label의 위치값을 지정합니다.(top, bottom, right, left)
position: 'bottom',
labels: {
// label의 컬러를 지정합니다.
color: '#e64c65',
}
},
}
}
});
위 코드의 결과물예시🤓
const ctx = document.getElementById('myChart');
new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [
{
label: '데이터2',
data: [10,2,3,4,5,6],
// 각 데이터의 컬러를 배열안에 넣어 지정할 수 있습니다.
backgroundColor: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
}
]
},
options: {
// 차트의 축을 지정합니다. 기본값은 'x'이며 bar, line차트에서만 유효합니다.
indexAxis: 'y',
plugins: {
legend: {
display: true,
},
},
scales: {
y: {
ticks: {
// y축 폰트컬러를 설정합니다.
color: "red",
},
},
x : {
ticks: {
// x축 폰트컬러를 설정합니다.
color: "blue",
},
}
}
}
});
위 코드의 결과물예시🤓
const ctx = document.getElementById('myChart');
new Chart(ctx, {
type: 'line',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [
{
label: '라인차트',
data: [1,4,3,6,2,5],
backgroundColor: 'rgba(230, 76, 101, 0.5)',
borderWidth: 1,
borderColor: 'green',
// 포인트위치의 스타일을 지정합니다.
pointStyle: 'rect',
// 포인트의 크기를 지정합니다.
pointRadius: 10,
// 포인트에 마우스오버를 하면 커지는 크기를 지정합니다.
pointHoverRadius: 15
}
]
},
options: {
plugins: {
legend: {
display: false,
},
},
scales: {
y: {
ticks: {
color: "gray",
},
grid: {
// 눈금선 노출여부를 결정합니다. 기본값은 true입니다.
display: false,
}
},
x : {
ticks: {
color: "gray",
},
grid: {
// 눈금선의 두께를 지정합니다.
lineWidth: 3,
}
}
}
}
});
위 코드의 결과물예시🤓
const ctx = document.getElementById('myChart');
new Chart(ctx, {
type: 'doughnut',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [
{
label: '도넛차트',
data: [1,4,3,6,2,5],
backgroundColor: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
borderWidth: 1,
}
]
},
options: {
layout : {
// 도넛차트의 내부 여백을 지정합니다. 방향지정도 가능합니다.
padding: 80,
},
plugins: {
legend: {
position: 'top',
},
title: {
// 도넛차트의 타이틀이름 노출여부를 지정합니다. 기본값은 true입니다.
display: true,
// 도넛차트의 타이틀을 지정합니다.
text: '도넛차트입니다.',
// 차트 타이틀의 위치를 수정할 때 사용합니다.
align: 'start',
// 차트 타이틀의 컬러를 수정할 때 사용합니다.
color: 'red',
font: {
// 타이틀의 폰트를 수정할 때 사용합니다.
size: 20,
}
}
}
}
});
위 코드의 결과물예시🤓
차트에 플러그인을 사용해 스타일 기능을 확장 할 수 있다. 그 중에서도 데이터를 호버하지 않고도 값을 표기하는 법을 알아보자. (해당 글은 script태그를 사용해 불러오는 법 기준으로 설명)
// 기존의 chart.js cdn외에 추가 cdn을 연결해 주어야 합니다.
// chart.js cdn주소 하단에 등록해주세요.
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2.0.0"></script>
// 여기는 script 영역입니다. 필수 추가요소를 넣어주세요
/*
* script 태그를 통해 플러그인을 불러올 경우 전역에 반드시 해당 선언을 해주어야 합니다.
*/
Chart.register(ChartDataLabels);
new Chart(ctx, {
차트코드...
}
const ctx = document.getElementById('myChart');
Chart.register(ChartDataLabels);
new Chart(ctx, {
type: 'doughnut',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [
{
label: '도넛차트',
data: [1,4,3,6,2,5],
backgroundColor: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
borderWidth: 1,
}
]
},
options: {
plugins: {
legend: {
position: 'left',
labels: {
color: 'green'
}
},
title: {
display: false,
},
// 불러온 플러그인 속성을 지정해줍니다.
datalabels: {
// 노출되는 데이터 값의 색상을 지정합니다.
color: '#fff',
font : {
// 폰트 사이즈를 지정합니다.
size: 20,
// 폰트 스타일을 지정합니다.
family: "'SCoreDream'",
}
}
}
}
});
위 코드의 결과물예시🤓
const ctx = document.getElementById('myChart');
Chart.register(ChartDataLabels);
new Chart(ctx, {
type: 'doughnut',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [
{
label: '도넛차트',
data: [1,4,3,6,2,5],
backgroundColor: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
borderWidth: 0,
}
]
},
options: {
layout: {
// 데이터값 노출 스타일링을 할때에는 값이 잘리므로 패딩값을 주는것을 권장합니다.
padding: 80,
},
plugins: {
legend: {
display: false,
},
title: {
display: false,
},
datalabels: {
formatter: function(value, context) {
// 단순히 값만이 아닌 label과 값을 함께 불러오고 단위를 지정해줄 수도 있습니다.
return context.chart.data.labels[context.dataIndex] + ':\n ' + value + '%';
},
// 값의 위치를 원하는 방향으로 정렬합니다.
textAlign: 'right',
// 값의 위치를 조정합니다. 차트별로 위치가 다르니 명세를 참고하세요.
anchor: 'end',
// 값의 위치를 조정합니다. 이 역시 명세를 참고하세요.
align: 'end',
// 값의 위치를 조정합니다. 이 역시 명세를 참고하세요.
offset: 10,
// 각각의 배경색을 배열로 지정할 수 있습니다.
backgroundColor: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
// border-radius값을 지정합니다.
borderRadius: 5,
color: '#fff',
font : {
size: 12,
family: "'SCoreDream'",
}
}
}
}
});
위 코드의 결과물예시🤓
padding의 필요성을 시각적으로 확인하기 위해 차트를 감싼 태그에 배경색을 주었습니다.
이밖에도 다양한 커스텀을 필요로 한다면!