Intro
์๋ ํ์ธ์. ์ด๋ฒ ์๊ฐ์๋ Chart.js์์ Y์ถ ์ต๋๊ฐ์ ๋์ ์ผ๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Case
์ฐ์ Chart ์ปดํฌ๋ํธ๋ฅผ ํ์ฉํ๋ ๋ถ๋ถ์ ์๋์ ๊ฐ์ต๋๋ค. option์ ๋ฐ๋ผ ํ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅด๊ฒ retrun ํ๊ณ ์์ต๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋์ ์ผ๋ก ๋ฌ๋ผ์ง๋ค ๋ณด๋ y์ถ ๋ฒ์ ์ต๋๊ฐ๋ ํด๋น datasets์ ๋ง๊ฒ ๋ค๋ฅด๊ฒ ํ์ํด์ผ ํ์ต๋๋ค.
const getData = (option: string): ChartData<'line'>['datasets'] => {
if (option === 'hourly') {
return [
{
fill: false,
...,
data: [0, 150, 180, 270, 210, 160, 160, 202, 265, 210, 270, 255, 290, 360, 375, 160, 202, 265, 210, 270, 255, 290, 360, 375]
},
{
fill: false,
...,
data: [50, 125, 105, 130, 215, 195, 140, 160, 230, 300, 220, 170, 210, 200, 280, 140, 160, 230, 300, 220, 170, 210, 200, 280]
},
{
fill: false,
...,
data: [20, 99, 82, 90, 115, 115, 74, 75, 130, 155, 125, 90, 140, 130, 180, 74, 75, 130, 155, 125, 90, 140, 130, 180]
}
]
} else if (option === 'daily') {
return [
{
fill: false,
...,
data: [20, 99, 82, 90, 115, 115, 74, 75, 130, 155, 125, 90, 20, 99, 82, 90, 115, 115, 74, 75, 130, 155, 125, 90, 100, 400, 130, 155, 125, 90]
}
]
} else {
return [
{
fill: false,
...,
data: [20, 99, 82, 90, 115, 115, 74, 75, 130, 155, 125, 90]
}
]
}
}
const data: ChartData<'line'> = {
labels: getLabel(option),
datasets: getData(option)
}
<LineChart data={data} height={400} options={options} />
How to dynamically set y-axis max value
์ด๋ฅผ ์ํด ์ ๋ ๋ค์์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์๋๋ฐ์, suggestedMax ์์ฑ์ ํ์ฉํ์ฌ getData()๋ฅผ ํธ์ถํ๊ณ , dataset์ data๋ฅผ flatMap() ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ๋ชจ๋ ํํํ๋ฅผ ํด์คฌ์ต๋๋ค. ์ดํ ๋ฐฐ์ด ์์์ ๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ๋ฝ์์ (Math.max) suggestedMax ์ ๋ฃ์ด์ฃผ์์ต๋๋ค.
const options: ChartOptions<'line'> = {
scales: {
...,
y: {
min: 0,
suggestedMax: Math.max(
...getData(option)
.flatMap(dataset => dataset.data)
.filter((value): value is number => value !== null)
),
...,
}
},
...
}
์์ ๋ฐฉ๋ฒ์ ํ์ฉํ๋ฉด Y์ถ ์ต๋๊ฐ์ ๋์ ์ผ๋ก ์ค์ ํ์ค ์ ์์ต๋๋ค .
'Library' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Chart.js] line ์ฐจํธ border line ๊ตต๊ฒ ์ง์ ํ๋ ๋ฐฉ๋ฒ (0) | 2023.08.11 |
---|