우리에겐 멋진 그래프를 만들수 있는 chart.js
가 있다.
하지만 내 데이터가 매우 간단하고, 특별한 커스텀이 필요없다하는 경우에 사용할 수 있는 패키지를 공유하겠삼
이름하야 Vue3-charts
chartJs와는 다르니까 혼동말기
사용법도 간단하지만, 내용도 매우 간단하여 커스텀이 거의 불가능하니 참고!!!
(사실 사용법을 매우 자세하게 읽어보지 않아서 그럴수도 있다..내가 필요한 기능만 사용했기 때문에)
# usign npm
npm install vue3-charts --save
# usign yarn
yarn add vue3-charts
명령어에서도, 패키지 이름에서도 알 수 있듯 Vue version > 3.x 이어야 한다!
Vue3-charts 패키지 설치 안내 바로가기
사용할 수 있는 차트의 종류는 Line, Bar, Area Pie 정도가 있다.
나는 Bar차트와 부가적인 기능(tooltip, grid) 등을 사용할 예정이다.
해당 내용들을 모두 import 해줘야 사용할 수 있다.
import { Chart, Grid, Bar, Tooltip } from 'vue3-charts';
왜 이렇게 흐림처리되는지는 모르겠다..마치 사용하지 않는 패키지처럼..;;
그리고 이제 본격적으로 사용을 해보기전에, 공식 사이트에 있는 coade를 긁어 왔다.
이렇게 집어 넣고 내가 사용할 데이터 들만 변경하여 넣는것이 제일 간단하긴 하다.
<template>
<Chart
:size="{ width: 500, height: 420 }"
:data="data"
:margin="margin"
:direction="direction"
:axis="axis">
<template #layers>
<Grid strokeDasharray="2,2" />
<Bar :dataKeys="['name', 'pl']" :barStyle="{ fill: '#90e0ef' }" />
<Bar :dataKeys="['name', 'avg']" :barStyle="{ fill: '#0096c7' }" />
<Bar :dataKeys="['name', 'inc']" :barStyle="{ fill: '#48cae4' }" />
<Marker :value="1000" label="Avg." color="#e76f51" strokeWidth="2" strokeDasharray="6 6" />
</template>
<template #widgets>
<Tooltip
borderColor="#48CAE4"
:config="{
pl: { color: '#90e0ef' },
avg: { color: '#0096c7' },
inc: { color: '#48cae4' }
}"
/>
</template>
</Chart>
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue'
import { Chart, Grid, Line } from 'vue3-charts'
import { plByMonth } from '@/data'
export default defineComponent({
name: 'LineChart',
components: { Chart, Grid, Line },
setup() {
const data = ref(plByMonth)
const direction = ref('horizontal')
const margin = ref({
left: 0,
top: 20,
right: 20,
bottom: 0
})
const axis = ref({
primary: {
type: 'band'
},
secondary: {
domain: ['dataMin', 'dataMax + 100'],
type: 'linear',
ticks: 8
}
})
return { data, direction, margin, axis }
}
})
</script>
template
사용법은 비슷하지만, 나는 차트들의 옵션을 한번에 관리하고 싶어서 옵션들을 한곳에 담았다.
const chartDatas = ref({
size: { width: 740, height: 340 }, // 차트 사이즈
graphData: [],
margin: {
left: 0,
top: 0,
right: 0,
bottom: 0,
}, // 차트들에게 마진값이 필요할 때
direction: 'horizontal',
axis: {
primary: {
type: 'band',
},
secondary: {
domain: ['dataMin', 'dataMax+10'], //데이터 최소값, 최대값의 범위
type: 'linear',
ticks: 5, // 표시되고 싶은 가로선의 갯수
},
},
responsive: 'true',
});
해당 옵션들을 살펴본다면 크게 어려운건 없을것 같다.
chartDatas.graphData
에는 API로 부터 받아오는 데이터들을 넣을 예정이다.
<template>
<Chart
class="chart"
:size="chartDatas.size"
:margin="chartDatas.margin"
:data="chartDatas.graphData"
:axis="chartDatas.axis"
:direction="chartDatas.direction"
:responsive="chartDatas.responsive"
>
<template #layers>
<Grid
:hideY="true"
:center="false"
/>
<Bar
:dataKeys="['date', 'uCount']"
:barStyle="{ fill: '#eb6483' }"
/>
<Bar
:dataKeys="['date', 'pCount']"
:barStyle="{ fill: '#42afc3' }"
/>
</template>
<template #widgets>
<Tooltip
class="chart--tooltip"
color="#606060"
:config="{
date: { color: '#606060' },
uCount: { label: `u회원가입`, color: '#606060' },
pCount: { label: `p회원가입`, color: '#606060' },
}"
:style="{ fontSize: '14px' }"
/>
</template>
</Chart>
</template>
표시된 <Bar/>
의 dataKeys
에는 key, value 값이라고 생각하면 될것같다.
그리하야 만들어진 차트
추가로 데이터의 범례를 만들고 싶었는데, 사용법을 찾지 못해 직접 만들어 넣었다..
<ul class="item--legend">
<li>
<div class="square left"></div>
<p>u</p>
</li>
<li>
<div class="square right"></div>
<p>p</p>
</li>
</ul>
마우스 오버 하면 툴팁이 생성되여 해당 내용을 볼 수 있고,
그리드가 표시되어 어떤 지점에 데이터를 확인할 수 있는지 알 수 있다.
만약 툴팁에 그리드가 표시되는게 싫다면 툴팁 태그 내에 :hide-line="true"
옵션을 추가하면 된다.
사용법이 매우 간단하여 그래프를 간단하게 그려서 표현하고 싶을 땐 매우 추천한다. 다만 커스텀이 어렵고, 사용자들이 많이 없어 관련 내용들을 검색 할 때 찾기가 어렵다.
나도 처음에 간단한 내용을 표현할 때 사용하려고 이 패키지를 사용했는데, 기획쪽에서 요구되는 기능들이 점점 추가되어 chart.js로 다시 갈아타야 하나 했는데, 잘 조율이 되어 현재선에서 마무리 되었다.
이런 대참사를 방지하기 위하여 사전에 협의가 많이 필요할 것 같다.
가치 있는 정보 공유해주셔서 감사합니다.