D3.js的起源与发展

460 阅读3分钟

D3.js的起源

在前端领域,图表一直都是常常使用到的工具,一般简单的图表使用Highcharts就能完成。但对于比较复杂的图表,或者功能比较好扩展的图表库,尤其是动态,交互式的数据可视化工具,市场上一直都没有更好的选择。

2009年,纽约时报的图表开发工程师Mike Bostock在工作中受限于传统图表开发工具,开发了一款一种更灵活的、可交互、动态、扩展化程度高的数据可视化图表库,并将其命名为D3.js(Data-Driven Documents),它能够通过数据驱动生成和操作文档中的图形元素。与市场上其它可视化图表库相比,D3.js显得更灵活和更易扩展,不仅仅能制作静态图表,还能制作动态、交互式、响应式的图表和可视化应用。

D3.js最开始模仿的是jQuery操作DOM的方式,将SVG所有元素像jQuery操作DOM元素那样来完成图形的变化,并且使用了链式调用方法。下面的代码就是d3.js的简单示例,表示在svg中新增5个g标签,熟悉jQuery的就会发现方法的调用与jQuery非常相似。

d3.select("svg-id")
    .data([1,2,3,4,5])
    .enter()
    .append("g")
    .attr("index", (d) => d)
    .attr("class", (d) => `unit-${d}`);

D3.js的发展历程

早期的D3.js只支持常规的几种图形开发,如折线图、柱状图、饼图等。后续增加了复杂的可视化图形,像力导向图、树状图、热力图等。另外还引入了过渡动画,让用户的使用体验得到了巨大提升。

image.png 随着使用人数越来越多,D3.js为了方便不同人群的使用,还增加了许多插件和扩展,例如d3-geo是用于处理地理数据的插件,d3-cloud是用于生成词云的插件,d3-scale是用于实现数据的比例尺转换等等。这些插件让d3.js得到了非常广泛的应用。

前端领域在过渡到React和Vue时代,d3.js也增加了对React和Vue的支持,让制作可视化应用更加便捷。

d3.js还支持WebGL、Canvas,使得它可以处理更大规模的数据集,因此在复杂业务场景,d3.js也能适应。

D3.js的特点

1、数据驱动

d3.js的所有图形都离不开数据,它将数据和DOM元素绑定,使图表和应用能够根据数据的变化自动更新,这样的理念让d3.js能够创建出强大的可视化图表,开发者和用户只需要关注数据的变化。

d3.js并没有像其它图表库那样提供预设的模板,官网的许多示例大部分都是用户提供的。用户控制图形的大小、颜色、形状等属性并没有固定的格式,只要你了解html相关知识,很快就能上手图表的修改和维护。

d3.js的官网Observablehq提供了大量示例,这些示例主要都是用户自己创建,上传数据集,以供更多的人参考和使用,并且这些示例可以实时修改代码和数据集,使用非常方便。如果你制作了更好的图表,也可以在Observablehq注册会员,将代码分享给全世界的用户参考和使用。

结合Cytoscape.js,d3.js甚至可以创建出3d图表WebCola,这是澳大利亚莫纳什大学的一个开源项目,在d3.js基础之上制作了非常糖醋的图表。

image.png