d3入门系列(一)

栏目: Html5 · 发布时间: 5年前

内容简介:d3是前端可视化领域最有名的工具了,这篇文章会简单介绍下 d3 这个工具。按照

d3

可能

是前端可视化领域最有名的 工具 了,这篇文章会简单介绍下 d3 这个工具。

d3是什么

按照 官方文档 上说,d3 是一套数据可视化工具,用来帮我们建立数据驱动的 DOM 模型。(当然也包括图表),但是和 DataV、Echarts 之类图表不同的是: d3 并不是开箱即用的,使用 d3 需要对诸如 html、svg、canvas技术有足够的了解,同时也给我们开发提供了更多的灵活性。

这里的 条形图 可以看到 d3 是如何做可视化的。

d3包括那些组件

Selection

如果你之前接触过d3,那么你可能对d3 selection 的链式调用有所了解。和 jquery 一样,d3 封装了大部分 DOM 方法,调用其方法会返回一个 selection 对象,你可以接着在这个对象上对 DOM 进行增删改查,事件绑定等操作。

这是一段从官网copy过来的例子
d3.selectAll("p").style("color", "blue");

数据映射

现代前端框架都强调数据驱动,D3中也有类似的概念。例如:

// 步骤1. 绑定数据和 selection
var p = d3.select("body")  
  .selectAll("p")
  .data([4, 8, 15, 16, 23, 42])

// 步骤2. Enter…
p.enter().append("p")  
    .text(function(d) { return d; });
// 步骤3. Exit…
p.exit().remove();

步骤 1 中我们将 selection 和对应的数据映射起来,selection 中的一个节点对应了数组中一条数据。注意此时并不会生成真实的 dom 节点。步骤2、3 中我们分别声明了数据新增时和删除的 selection 操作。d3 会在数据变化时调用这些操作。

通过数据映射,d3 将数据和 selection 连接起来,使我们免受复杂 dom 状态的困扰,并且保证生成的 dom 是可预测的。enter 和 exit 可以让我们更细粒度的观测到数据的变化,从而作出对应的处理。(比如节点删除动画)

Layout

Layout ,顾名思义,是布局的意思。但d3中的layout强调的是算法而非渲染,这和dataV 或echarts 中将数据和配置传入,直接可以渲染图表不同。以 tree 为例:

d3入门系列(一)

d3 的 tree 会接受树结构的数据,经过 layout 的转换,加上坐标,然后数据绑定到 selection,渲染出树结构。可以看到,layout 只负责坐标转换和计算的部分,至于渲染,d3 不会帮你封装好,需要你主动的用 svg、canvas 甚至html进行渲染。

这里是使用 d3 渲染 一棵树的例子

在 React 中使用

react 和 d3 都强调数据驱动,所以将两者结合实际上是非常方便的。

我们只需要将数据保存在react中,把数据和 d3 连接起来,使用d3来绘制页面即可,比如 这个例子

需要注意的是,state 变化时 d3 并不会执行 enter 或者 exit 内的方法,需要我们手动  componentDidUpdate 声明周期中主动执行渲染操作。这和 Vue 和 React 的响应式是不同的,d3 并不会去监听 data 的变化,也就不会执行对应的 enter 或 exit 操作。

组件封装

组件化也是很重要的,特别在整个工程变得复杂之前。d3 中也提供了封装组件的方法。这就是 selection.call 方法,例如:

// 声明一个函数,接受 selection 作为参数
function makeStyle(selection) {  
  selection
      .style("width", 300)
      .style("height", 300);
}
// 在 div 的 selection 上调用它
d3.select('div').call(makeStyle)

通过 selection.call 我们可以封装一些组件,在需要的地方调用即可。

但是当 react 和 d3 结合使用时,使用 react 组件还是 d3 组件呢?大多数情况下,这是要分场景来看的。

1. 当你的界面大部分是 react 渲染而来,而且没有太多交互性时,react 组件是比较好的。比如一个条形图:只需要接受数据和配置,直接渲染出页面。这时把条形图直接做成一个 react 函数式组件,接受 data 和 config,内部使用 d3 来渲染即可。

2. 还有一些情况交互复杂,父组件也是 d3 渲染来的,这时使用 d3 组件更佳。比如编辑器

总结

和 AntV、ECharts 不同,d3 没有引入新的图形描述语法。使用 d3 需要你了解底层的 svg、canvas 知识。这同时提高了开发难度和灵活度。如果你对图表有高度的自定义需求或者想要了解 svg,canvas 之类的技术,你可以使用d3。如果只是普通的图表,使用 Echarts 即可。


以上所述就是小编给大家介绍的《d3入门系列(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

闪魂FLASH8网站建设实录

闪魂FLASH8网站建设实录

马谧铤 / 中国林业 / 2006-7 / 46.00元

《闪魂FLASH8网站建设实录》旨在提供以Flash(Flash 8.0为创作工具)为技术核心的整套互动网站的开发思路,其中包括了网站策划、平面设计、程序设计等实用的互联网应用技术。内容包括Photoshop CS2设计,FIash 8创作和ActionScript应用程序开发的操作流程。在技术学习的过程中.大家还将体会到顶级互动网站设计、网站建设的设计流程和思路。《闪魂FLASH8网站建设实录》......一起来看看 《闪魂FLASH8网站建设实录》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换