๐ ๋ชฉ์ฐจ
- Introuduction
- d3.interval
- Update pattern
- Conclusion
๐Introduction
์๋ ํ์ธ์. ์ค๋์ D3์์์ update pattern์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
๐ d3.interval
update pattern์ผ๋ก ๋ค์ด๊ฐ๊ธฐ ์ ์ ์ ์ d3์ interval์ ๋ํด์ ์๊ฐํ ๊น ํฉ๋๋ค. d3.interval์ setInterval๊ณผ ๋งค์ฐ ๋น์ทํฉ๋๋ค. ๋จ clearInterval์ ์ํด์ค๋ ๋๋ค๋ ์ฅ์ ์ด ์์ด์.
d3.interval(() => {
console.log("hello") // hello๊ฐ 1์ด์ ํ๋ฒ์ฉ ์ฐํ
}, 1000);
๐ Update pattern
updateํจํด์ data join๋ถํฐ ์์์ด ๋ฉ๋๋ค.
const rects = g.selectAll("rect").data(data, d => d.month);
์ฌ๊ธฐ์๋ ๋ถ๋ช rect๊ฐ ์์ง ์์์ ๊ฑฐ์์. ๊ทผ๋ฐ ๋ค์ ์ด๋ ๊ฒ enter๋ฅผ ์ฐ๋๊ฑธ ๋ณธ์ ์ด ์์ผ์ค๊ฒ๋๋ค.
// DATA JOIN
const rects = g.selectAll("rect").data(data, d => d.month);
// ENTER
rects
.enter()
.append("rect")
.attr("fill", "grey")
.attr("y", y(0))
.attr("height", 0)
.attr("x", (d) => x(d.month))
.attr("y", (d) => y(d[value]))
.attr("width", x.bandwidth)
.attr("height", (d) => HEIGHT - y(d[value]));
์ด๋ rects๋ฅผ ํ๋ฒ ์ฐ์ด๋ณด๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์ฌ๊ฑฐ์์. exit, enter, parent, group์ด๋ ๊ฒ ๋์ฌ๊ฑฐ์์. ๊ทธ๋์ update๋ ์ด ์ค๊ฐ์ ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค. ์ด๊ฒ ๋ฌด์จ๋ง์ธ๊ฐ ์ถ์ง์? ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ๋ณด์ธ์.
const rects = g.selectAll("rect").data(data, (d) => d.month);
// EXIT
rects
.exit()
.attr("fill", "red")
.transition(t)
.attr("height", 0)
.attr("y", y(0))
.remove();
// UPDATE
rects
.transition(t)
.attr("y", (d) => y(d[value]))
.attr("x", (d) => x(d.month))
.attr("width", x.bandwidth)
.attr("height", (d) => HEIGHT - y(d[value]));
yLabel.text(flag ? "Profit ($)" : "Revenue ($)");
// ENTER
rects
.enter()
.append("rect")
.attr("fill", "grey")
.attr("y", y(0))
.attr("height", 0)
.attr("x", (d) => x(d.month))
.attr("y", (d) => y(d[value]))
.attr("width", x.bandwidth)
.attr("height", (d) => HEIGHT - y(d[value]));
์ด๋ ๊ฒ enter์ exit์ ํ์ง ์๋ ๋ถ๋ถ์ ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค.
๐Conclusion
์ด๋ ๊ฒ ์ค๋์ ํ๋ฒ update ํจํด์ ๋ํด์ ์์๋ณด์์ต๋๋ค. ๊ทธ๋ผ ๋ค์์๊ฐ์๋ scatter plot์ ๋ํด์ ํ๋ฒ ์์๋ณผ๊ฒ์!
'D3' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
D3 - BarChart ๋ง๋ค๊ธฐ (0) | 2021.01.07 |
---|---|
D3 - Scale and Axes (0) | 2021.01.06 |
D3 - Baisc (0) | 2021.01.03 |