在数据可视化领域,D3.js 凭借其强大的 SVG 操作能力成为行业标杆工具,本文将深入讲解如何运用 D3.js V7+ 版本创建具备专业品质的圆形元素,涵盖基础绘制、动态交互、数据绑定等核心知识体系,并提供可直接复用的代码模板。
环境准备与基础绘制
<!DOCTYPE html> <html> <head> <script src="https://d3js.org/d3.v7.min.js"></script> </head> <body> <div id="canvas"></div> <script> const svg = d3.select("#canvas") .append("svg") .attr("width", 600) .attr("height", 400);
svg.append("circle") .attr("cx", 300) .attr("cy", 200) .attr("r", 50) .style("fill", "#2196F3") .style("stroke", "#1565C0") .style("stroke-width", 3);
</script>
</body>
</html>
- cx/cy:圆心坐标基准点
- r:控制圆形半径
- fill/stroke:实现填充与描边分离控制
数据驱动可视化实践
const dataset = [ {x: 100, y: 150, value: 25}, {x: 300, y: 200, value: 40}, {x: 500, y: 180, value: 35} ];
svg.selectAll("circle").data(dataset).enter().append("circle").attr("cx", d => d.x).attr("cy", d => d.y).attr("r", d => d.value).style("fill", "rgba(33,150,243,0.8)").style("stroke", "#0D47A1");
通过数据绑定实现:
- 多圆形的批量生成
- 动态半径映射数据指标
- 位置参数的自动化配置
交互增强与动画效果
1 智能悬浮反馈
circles.on("mouseover", function(event) {
d3.select(this)
.transition()
.duration(300)
.style("fill", "#FF5722")
.attr("r", d => d.value * 1.2);
})
.on("mouseout", function() {
d3.select(this)
.transition()
.duration(300)
.style("fill", "#2196F3")
.attr("r", d => d.value);
});
<article class="feature-card">
<h3>3.2 动态数据更新</h3>
<pre class="code-block">
function updateCircles(newData) {
const circles = svg.selectAll("circle")
.data(newData);
circles.exit().remove();
circles.enter()
.append("circle")
.merge(circles)
.transition()
.duration(800)
.attr("cx", d => d.x)
.attr("cy", d => d.y)
.attr("r", d => d.value);
}