D3.js 学习笔记-01

曾经觉得D3超级难用,API反人类,好多东西跟现代的JS不符,上手不容易…
后来,当开始用D3之后,发现,自己误会了D3.js的定位,D3的丰富与灵活超乎了自己的想象,于是决定认真地学习下这个古老而又有极强生命力的库!


Overview

阅读D3的Overview:https://d3js.org/

虽然篇幅很短,但是介绍了D3的核心特性,个人总结两点:

  1. 强大的DOM操作功能
  2. Data->DOM 的 transformation

感觉D3的核心功能就这么两个,它的API也是为这两个而服务的,习惯了之后特别的简洁和自然。

DOM操作功能不必说,跟JQuery类似,对DOM的获取、属性修改等操作非常容易,不过D3强大的地方在于,由于是Data Driven的,对于DOM操作的动态性以及与数据的贴合性非常的好,使其在用DOM显示数据上有很大的优势!

第二项,非常的优秀!

Transformation, not Representation

这是D3的一个特性,其所有的显示,都是普普通通的DOM元素,图形是SVG之类的,没有自己的一套表现,D3的重点不在于此,而是在于转化上,将普通的数据,能够很便利的映射到DOM上,通过丰富的SVG的表现力,来呈现可视化图形。

加上许多D3的插件或者辅助功能,D3的能力被大幅的提升,比如d3-force,运用力引导图的算法布局图,然后运用d3来呈现出来,其实算法本身跟显示关系并不大,只需要将每个点的位置算出来即可,但是由于D3生态的丰富以及表现的方便,于是就与其结合了起来。现在去找一个力引导布局的算法,首选还是d3-force

学习

没有找到官方的Tutorial,这很难过,D3的所有官方文档,都在GitHub Repo的wiki里:https://github.com/d3/d3/wiki 而其中的tutorial部分,其实就是一个awesome-list,虽然很多,但没有系统完整的,非常的不友好!

不过有几个东西还是很值得参考的:

  1. API Reference,不管什么,reference都是必须的,写的还算明白,不过不能拿来学习:https://github.com/d3/d3/blob/master/API.md
  2. Gallery:https://github.com/d3/d3/wiki/Gallery 现在应该所有的例子,都放在了Observable上,这是个类似于notebook的新玩意,似乎还挺好玩的
  3. Observable上的visualization collection:https://beta.observablehq.com/collection/@observablehq/visualization

目前打算是稍微看下Observable这个东西,然后挑感兴趣的例子去看如何实现,然后尝试自己写一些!