์ํฉ
d3 ์ฐจํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก line ์ฐจํธ๋ฅผ ๊ทธ๋ฆฌ๋๋ฐ, ์ฐจํธ์ ๊ทธ๋ ค์ง๋ value ๊ฐ์ด 0์ผ๋๋ ๋ผ์ธ ์ฐจํธ๊ฐ ์์ ๋ํ๋์ง ์๊ณ , ๋ค๋ฅธ ๊ฐ์ด ์์๋๋ ์ฐจํธ๊ฐ ๊ทธ๋ ค์ง๋ค๊ฐ 0์ด ๋์ค๋ฉด ์ฐจํธ๊ฐ ๋๊ธฐ๋ ์ด์ํ ํ์์ด ์์๋ค.
Error: <path> attribute d: Expected number, "M36.5,NaNL79.5,NaNL122…".
๊ฒ๋ค๊ฐ ์ฝ์์๋ ์ด๋ฐ ์๋ฌ๊ฐ ์ฐํ๊ณ ์์๋ค.
๊ธฐ์กด
import { line } from 'd3-shape';
const LineChart = ({bars, xScale, yScale}) => {
const lineGenerator = line()
.x((bar) => xScale(bar.data.indexValue) + bar.width / 2)
.y((bar) => yScale(bar.data.data.value));
return (
<path
d={lineGenerator(bars)}
fill="transparent"
stroke={'rgba(200, 30, 15, 1)'}
style={{pointerEvents: 'none'}}
/>
);
};
export default LineChart;
๋ผ์ธ์ฐจํธ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํด์ ๋ฐ๋ ๋ฐ์ดํฐ ๋ฆฌ์คํธ bars ๋ ํ๊ธฐ์ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ด ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก d3๋ line() ๋ฉ์๋๋ฅผ ํตํด string ํ์์ ์ขํ๋ฅผ ๊ฐ์ง๊ณ ์๋ path ์๋ฆฌ๋จผํธ๋ฅผ ๊ทธ๋ฆฐ๋ค.
์ฝ์๋ก ์ฐ์ด๋ณด๋ฉด bars ๋ ์์ ๊ฐ์ ๋ชจ์์์ ํ์ธํ ์ ์๋ค.
๊ธฐ์กด ์ฝ๋๋ y์ถ์ ๊ทธ๋ฆด๋ data ๊ฐ์ yScale ์ด๋ผ๋ ๋ฉ์๋์์ y ์ถ ํด๋น ๊ฐ์ง๊ณ ์ค๊ณ ์ถ์ ๋ฐ์ดํฐ๋ฅผ data.data.value๋ก ๊ฐ์ ธ์๋ค.
๊ทธ๋ฐ๋ฐ ๊ทธ data ์ ๋ณด๋ฅผ ์์ธํ ํผ์ณ๋ณด๋๋ฐ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ ๋์๋ค.
data.data.value ๋ก ๊ฐ์ ๊ฐ์ ธ์๋๋ฐ, ๊ทธ ์ ๋ณด๋ value๊ฐ 0 ๊ฐ์ผ๋๋ ์์ data.data: {} ๊ฐ์ฒด ์์ value ํ๋กํผํฐ๊ฐ ์กด์ฌ ํ์ง ์๋๋ฐ์ ๋ฌธ์ ๊ฐ ๋ ๊ฒ์ด์๋ค.
๋ฐ๋ผ์ value๊ฐ 0์ผ๋ ์ ํํ ์ซ์ํ์ผ๋ก ํด๋น ๊ฐ์ ๋ํ๋ด์ฃผ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ค.
๋คํํ data.value์ ๊ทธ ํด๋น๊ฐ์ด ๋ค์ด๊ฐ์๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค. ๋ฐ๋ผ์ ๊ทธ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ฃผ์๋ค.
๋ณ๊ฒฝ
import { line } from 'd3-shape';
const LineChart = ({bars, xScale, yScale}) => {
const lineGenerator = line()
.x((bar) => xScale(bar.data.indexValue) + bar.width / 2)
.y((bar) => yScale(bar.data.value)); //<---------- ์์
return (
<path
d={lineGenerator(bars)}
fill="transparent"
stroke={'rgba(200, 30, 15, 1)'}
style={{pointerEvents: 'none'}}
/>
);
};
export default LineChart;
data.value ๊ฐ์ผ๋ก ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ค๋ค.
๊ทธ๋ฌ๋ฉด 0์ผ๋๋ ๋ผ์ธ๊ทธ๋ํ๊ฐ ์ ๋ํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค!!