๐ ๋ชฉ๋ก
- Introduction
- Adding svgs with d3
- Selection and data joins
- Loading external datas
- Conclusion
๐ Introduction
์๋ ํ์ธ์. ์ค๋์ d3์ ๊ธฐ์ด์ ์ธ ๋ถ๋ถ์ ๋ํด์ ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ผ ํ๋ฒ ์์๋ณผ๊น์~~!?
๐ Adding svgs with d3
์ด์ svg๋ฅผ ํตํด ๋ค์ํ ๋ํ๋ค์ ๊ทธ๋ ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
// โญ๏ธ d3.select๋ฅผ ํตํด dom์ ์ง์ ํ ์ ์์ด์. ๊ทธ๋ฆฌ๊ณ ํญ์ method chaining์ด ๊ฐ๋ฅํฉ๋๋ค.
const svg = d3.select("#chart-area").append("svg")
.attr("width", 400)
.attr("height", 400)
// ์ด์ ์์ฑ๋ svg๋ฅผ ํตํด ์์ ๊ทธ๋ ค๋ณผ๊ฒ์.
svg
.append("circle")
.attr("cx", 30)
.attr("cy", 30)
.attr("r", 20)
.attr("fill", "red");
// ์ฌ๊ฐํ๋ ๋ง๋ค์ ์์ต๋๋ค.
svg
.append("rect")
.attr("width", 30)
.attr("height", 40)
.attr("fill", "blue")
.attr("x", 50)
.attr("y", 60);
// ํ์๋ ๊ทธ๋ฆด์ ์๊ตฌ์ฉ
svg
.append("ellipse")
.attr("cx", 100)
.attr("cy", 300)
.attr("rx", 30)
.attr("ry", 60);
// ์ ๋ ๊ทธ๋ ค๋ณผ์ ์์ต๋๋ค
svg
.append("line")
.attr("x1", 0)
.attr("y1", 0)
.attr("x2", 200)
.attr("y2", 200)
.attr("stroke", "black")
.attr("stroke-width", 3);
๐ Selection and data joins
data join์ .data๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด์ ํ๋ฒ 5๊ฐ์ ์๋ฃ๋ฅผ ๊ฐ์ง๊ณ ์ data๋ฅผ join์ ์์ผ๋ณผ๊ฒ์.
const data = [25, 20, 10, 12, 15];
const svg = d3
.select("#chart-area")
.append("svg")
.attr("width", 400)
.attr("height", 400);
// ์ฌ๊ธฐ์ selectAll("circle")์ ์ค์ ์ ์ผ๋ก ์๋ฌด๊ฒ๋ ๋์ค์ง ์์๊ฑฐ ์์. ์์ง ๊ทธ๋ฆฌ๊ธฐ ์ ์ด๊ฑฐ๋ ์.
const circles = svg.selectAll("circle").data(data);
๊ทธ๋์ ๋ฐ๋ก ์ด๋ enter
๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
const data = [25, 20, 10, 12, 15];
const svg = d3
.select("#chart-area")
.append("svg")
.attr("width", 400)
.attr("height", 400);
const circles = svg.selectAll("circle").data(data);
// enter๊ฐ ์ผ์ด๋๋ฉด์ ์ด์ data๋ฅผ ์ํํ๊ฒ ๋ฉ๋๋ค.
circles
.enter()
.append("circle")
// ์ฒซ๋ฒ์จฐ ์ธ์๋ data์ datum์ ๋๋ฒ์งธ ์ธ์๋ index๋ฅผ ๋ปํฉ๋๋ค.
.attr("cx", (d, i) => i * 60) // ์์๋ก๋ ์ฌ์ฉํ ์ ์์ง๋ง ํจ์๋ก๋ ์ ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
.attr("cy", 250)
.attr("r", (d) => d);
๐ Loading external datas
d3์์๋ json์ด๋ csv... ๊ฐ์ ํ์ผ๋ค์ ์ง์ํฉ๋๋ค. ๊ทธ๋ฅ d3.csv์ด๋ฐ์์ผ๋ก ์จ์ฃผ๋ฉด๋์. ๊ทธ๋ฆฌ๊ณ promise๋ฅผ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์ then์ผ๋ก ์ด์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
d3.csv("./js/ages.csv").then((data) => {
console.log(data);
// {name: "Tony", age: "10"}
// {name: "Jessica", age: "12"}
// {name: "Andrew", age: "9"}
// {name: "Emily", age: "10"}
// {name: "Richard", age: "11"}
});
๐ Conclusion
์ค๋์ ํ๋ฒ ์ด๋ ๊ฒ d3์ ๊ธฐ๋ณธ์ ์ธ ๋ถ๋ถ์ ๋ํด์ ํ๋ฒ ์์๋ณด์์ต๋๋ค. ๋ค์ ํฌ์คํ
์์๋ d3์ ๊ฐ์ฅ ๋ง์ด ์ฐ๋ scale๊ณผ axes๋ฅผ ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ผ ์๋
~!
'D3' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
D3 - Update pattern (0) | 2021.01.13 |
---|---|
D3 - BarChart ๋ง๋ค๊ธฐ (0) | 2021.01.07 |
D3 - Scale and Axes (0) | 2021.01.06 |