D3 是什么
数据驱动文档用于在浏览器中创建动态和交互式数据视觉化的 JavaScript 库。
1.用 D3 给文档添加元素
选择元素: select()
添加到文档中的元素: append()
设置所选节点的文本: text()
eg:
d3.select("ul")
. append("li")
. text("Very important item");
eg:
复制代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Learning D3</title>
<script src="https://d3js.org/d3.v7.min.js"></script>
</head>
<body>
<h1>Learning D3</h1>
<script>
const body = d3.select("body");
body.append("p").text("Hello, World!");
</script>
</body>
</html>
复制代码
2.用 D3 选择一组元素
selectAll() 方法选择一组元素
eg:
d3.selectAll("li")
.text("list item");
复制代码
3.使用 D3 中的数据
data()选择连接着数据的 DOM 元素, 数据集作为参数传递给该方法。eg:
<body>
<script src="https://d3js.org/d3.v6.min.js"></script>
<script>
const dataset = [12, 31, 22, 17, 25, 18, 29, 14, 9];
// 选择 body 节点
const bodySelection = d3.select("body");
// 选择所有的 h2 元素
const h2Selection = bodySelection.selectAll("h2")
.data(dataset)
.enter()
.append("h2")
.text("New Title");
</script>
</body>
复制代码
这段代码告诉 D3 先选择页面上的 ul 元素, 再选择所有的列表项,它将返回空。 然后 data() 方法接收数组作为参数,并运行三次后面的代码,每次对应数组中的一个对象。 enter() 方法发现页面中没有 li 元素,但是需要 3 个(每个对应 dataset 中的一个数据)。 新的 li 元素被追加到 ul,文本为 New item。
4.使用 D3 中的动态数据
<body>
<script src="https://d3js.org/d3.v6.min.js"></script>
<script>
const dataset = [12, 31, 22, 17, 25, 18, 29, 14, 9];
d3.select("body").selectAll("h2")
.data(dataset)
.enter()
.append("h2")
.text((d) => d + " USD");
</script>
</body>
复制代码
使每个 h2 元素显示 dataset 数组中的对应值,加上一个空格和字符串 USD。 例如,第一个标题应该为 12 USD。
5.给元素添加内联样式
D3 允许你使用 style() 方法在动态元素上添加内联 CSS 样式。
d3.select("body").selectAll("h2")
.data(dataset)
.enter()
.append("h2")
.text((d) => (d + " USD"))
.style("font-family", "verdana");
复制代码
将 style() 方法添加到编辑器中的代码中,使所有显示的文本都具有 verdana 的 font-family
6.根据数据更改样式
你想基于数据来改变元素的样式可以在 style() 方法中使用包含条件逻辑的回调函数。 回调函数以 d 作为参数来表示一个数据点:
d3.select("body").selectAll("h2")
.data(dataset)
.enter()
.append("h2")
.text((d) => (d + " USD"))
.style("color", (d) => {
if (d < 20) {
return "red";
} else {
return "green";
}
});
复制代码
在这个代码中,我们使用了一个回调函数来设置 color 属性。如果数据值小于 20,则返回字符串 "red",否则返回字符串 "green"。然后我们使用 style() 方法将 color 属性设置为相应的颜色。
评论