- y์ถ์ ์ซ์๋ฅผ ์์ ์ง์ ํ์ฌ ๋ฃ์ผ๋ ค๊ณ ํ๋, Nivo ์ฐจํธ์ format ํจ์๋ ์ผ๋ฐ์ ์ผ๋ก HTML ๋๋ JSX ์์๋ฅผ ์ง์ํ์ง ์์ผ๋ฉฐ, ๋ฌธ์์ด์ ๋ฐํํด์ผ ํจ. ๋ฐ๋ผ์ value ๊ฐ์ฒด์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํด ๋ฐํํด์ผ ํจ.
format: value => {
// ๋ฌธ์์ด์ผ ๊ฒฝ์ฐ
return `${value.label}`;
}
//๊ทธ ์ด์ธ์๋
format: value => `${value}`
- ์ฐจํธ ํน์ ๋ ์ง์ ๋ง์ฐ์ค ํธ๋ฒ ํ ๊ฒฝ์ฐ ํด๋น ๋ ์ง์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ tooltip์ ํ์ํ๊ณ ์ถ์๊ณ , nivo ๊ณต์๋ฌธ์์ ์์์ง๋ ๋ชจ๋ฅด๋ ์ฐพ์ง ๋ชปํด tooltip์ ์ปค์คํ
ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ฉ. ์ด๋ ๊ฒ ํ ์ด์ ๋ ์ค๋ณต๋๋ ๊ฐ์ ๊ฐ์ง ๊ฒฝ์ฐ ์ฐจํธ์์ ํ๊ฐ์ ๋ผ์ธ์ผ๋ก๋ง ํํ์ด ๋์ด ๋ณด์ํ๊ธฐ ์ํจ.
// ๋ง์ฐ์ค ํธ๋ฒ ํ์๋ tooltip ์ปค์คํ
x์ถ์ ๋ ์ง : ์ง์ญ ๋ฏธ์ธ๋จผ์ง ์์น
const CustomTooltip = ({ slice }) => {
// legends/tooltip ๊ณตํต ์คํ์ผ ์ ์ฉ
return (
<div
style={{
background: 'white',
padding: '10px',
border: '1px solid #ccc',
}}
>
<div style={{ textAlign: 'center', padding: '4px' }}>
{slice.points[0].data.xFormatted}
</div>
{slice.points.map(point => (
<div
key={point.id}
style={{ display: 'flex', alignItems: 'center', margin: '5px 0' }}
>
{/* ์ฌ๋ณผ์ SVG ์์ผ๋ก ํ์ */}
<svg
width='12'
height='12'
style={{ marginRight: '10px', opacity: '0.75' }}
>
<circle cx='6' cy='6' r='6' fill={point.serieColor} />
</svg>
{/* ์๋ฆฌ์ฆ ์ด๋ฆ๊ณผ ๊ฐ */}
<span>
<b>{point.serieId} :</b> {point.data.yFormatted}
</span>
</div>
))}
</div>
);
};
const MainContainer = () => {
return (
<ChartContainer>
<ResponsiveLine
data={data}
//...
enableSlices='x' // sliceTooltip prop์ ํ์ฑํ!
sliceTooltip={CustomTooltip}
/>
</ChartContainer>
);
};
- y์ถ์ ์ซ์๋ฅผ ๋ฏธ์ธ๋จผ์ง ์์น์ ๋ฐ๋ผ ์ปฌ๋ฌ๋ฅผ ์ง์ ํ๊ณ ์ถ์.
nivo์ฐจํธ ์์ฑ์ค axisLeft(y์ถ) ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๊ฐ๋ฅ. ์ง์ ์ ์ธ ๋ ์ด๋ธ ์์ ๋ณ๊ฒฝ์ ๋ถ๊ฐ. theming์ ํตํด ์ถ ์ ์ฒด ์์ ๋ณ๊ฒฝ์ ๊ฐ๋ฅํ๋ y์ถ๋ง ์์๋ณ๊ฒฝํ๋๊ฒ์ ํ์ธ์ค. ๋ณด๋ฅ๐