D3.js实现散点图和气泡图的方法详解

前端之家收集整理的这篇文章主要介绍了D3.js实现散点图和气泡图的方法详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

小编之前已经跟大家分享过了《》和《》这两篇文章,已经介绍过柱状图和折线图了。下面就来说说和这两种非常相似的图表——散点图和气泡图。有需要的朋友们可以参考学习。

散点图和气泡图的实现

还是和之前一样,我们先把简单的画图框架搭起来,添加SVG画布:

<Meta charset="UTF-8"> 散点图和气泡图

散点图和气泡图虽然在展现意义上是不同的,但从技术实现的角度来讲,它们还是很类似的,都是由坐标轴和一个个的圆所组成的。

散点图

坐标轴的实现

为了实现真实的效果,散点图和气泡图我们使用不同的模拟数据。与折线图同理,散点图的各点的坐标的关系在坐标轴上的关系是连续的,所以它的x轴和y轴都使用线性比例尺(线性比例尺和序数比例尺的区别参见《方法详解》)。

同折线图的坐标轴的实现是相同的,先用d3.scale.linear()创建比例尺,再用d3.svg.axis()创建坐标轴并且设置对应的比例尺,最后添加SVG元素并“绑定”坐标轴到其上,就可以看到完成以后的坐标轴。注意这里需要对移动SVG元素,使它们在视觉上组装成一个坐标系(但实际上它们在位置上是零散的,并没有很强的关系)。

散点的实现

在图表中一般点都是通过画圆来实现的,当圆的半径足够小的时候,它就是点。

添加散点 main.selectAll('.point') .data(dataset) .enter() .append('circle') .attr('class','point') .attr('cx',function(d) { return xScale(d[0]); }) .attr('cy',function(d) { return yScale(d[1]); }) .attr('r',5);

与折线图添加点的方式是一样的。在main元素中选择到所有的圆先“占位”(因为此时选择到的是一个空的集合,只是这个集合代表main中所有的圆),然后绑定dataset到此集合上,通过enter()append()搭配使用添加新的circle元素直到集合元素个数与dataset子元素个数相同为止。用比例尺计算出各圆的坐标并对其相关属性进行赋值,就完成了点的添加。因为散点图的点有点多,为了图表更加美观,给圆设置一下样式。

最后,散点图长这样。

气泡图

坐标轴的实现

因为只有模拟的数据结构不同,实现原理都是类似的,这里就不再赘述,直接上代码

添加x轴和y轴 var xScale = d3.scale.linear() .domain([0,100]) .range([0,width - padding.left - padding.right]); var yScale = d3.scale.linear() .domain([0,50]) .range([height - padding.top - padding.bottom,0]); var xAxis = d3.svg.axis() .scale(xScale) .orient('bottom'); var yAxis = d3.svg.axis() .scale(yScale) .orient('left');

气泡的实现

添加气泡 main.selectAll('.bubble') .data(dataset) .enter() .append('circle') .attr('class','bubble') .attr('cx',function(d) { return xScale(d.x); }) .attr('cy',function(d) { return yScale(d.y); }) .attr('r',function(d) { return d.weight; });

最后的气泡图是长这样的。

总结

以上就是利用D3.js实现散点图和气泡图的全部内容,希望这篇文章对大家的学习和工作能有所帮助。小编还会陆续更新关于D3.js的文章,请大家继续关注编程之家,如果有疑问大家可以留言交流。

猜你在找的JavaScript相关文章