数据可视化实战:使用D3设计交互式图表
时间: 2023-09-22 07:06:37 浏览: 180
数据可视化实战(使用D3设计交互式图表)
好的,以下是一个利用D3设计交互式图表的实战示例,供您参考:
```javascript
// 定义数据
var dataset = [
{ name: "A", value: 10 },
{ name: "B", value: 20 },
{ name: "C", value: 30 },
{ name: "D", value: 40 },
{ name: "E", value: 50 }
];
// 创建SVG画布
var svg = d3.select("body")
.append("svg")
.attr("width", 500)
.attr("height", 300);
// 创建饼图
var pie = d3.pie()
.sort(null)
.value(function(d) {
return d.value;
});
var path = d3.arc()
.outerRadius(100)
.innerRadius(0);
var label = d3.arc()
.outerRadius(120)
.innerRadius(120);
var arc = svg.selectAll(".arc")
.data(pie(dataset))
.enter()
.append("g")
.attr("class", "arc")
.attr("transform", "translate(200,150)");
arc.append("path")
.attr("d", path)
.attr("fill", function(d) {
return d3.schemeCategory10[d.index];
})
// 添加交互
.on("mouseover", function(d) {
d3.select(this)
.transition()
.duration(500)
.attr("d", d3.arc()
.outerRadius(120)
.innerRadius(0)
);
})
.on("mouseout", function(d) {
d3.select(this)
.transition()
.duration(500)
.attr("d", path);
});
arc.append("text")
.attr("transform", function(d) {
return "translate(" + label.centroid(d) + ")";
})
.attr("text-anchor", "middle")
.text(function(d) {
return d.data.name;
});
// 添加图例
var legend = svg.selectAll(".legend")
.data(dataset)
.enter()
.append("g")
.attr("class", "legend")
.attr("transform", function(d, i) {
return "translate(320," + (i * 20 + 100) + ")";
});
legend.append("rect")
.attr("x", 0)
.attr("y", 0)
.attr("width", 18)
.attr("height", 18)
.attr("fill", function(d, i) {
return d3.schemeCategory10[i];
});
legend.append("text")
.attr("x", 24)
.attr("y", 9)
.attr("dy", ".35em")
.text(function(d) {
return d.name;
});
```
这个示例创建了一个饼图,使用了D3的pie、arc和centroid等方法。每个扇形上方都添加了一个文本标签,显示对应的名称。同时,每个扇形都添加了交互事件,当鼠标悬停时变成大圆环,鼠标移开时恢复为正常大小。另外,还添加了一个图例,显示对应颜色和名称。
希望这个示例能够帮助您了解如何使用D3设计交互式图表。您可以根据实际需求修改代码,并尝试添加更多的交互事件和图表类型。
阅读全文