A Glance at D3.js

Published on May 18, 2014

这几天,嗯,跟着Dashing D3.js把传说中的D3.js入了个门。

D3在创建基于浏览器的动态数据可视化并带交互真是方便。

从一无所知到数据绑定

为何数据可视化

  • 一图胜千言,图形是直观的。
  • 图形是简洁明了的表达方式
  • 世界的数据量是巨大的,图形是好的分析和展示方式
  • 数据是新的石油

为何选择D3.js

  • D3.js 是基于数据操作文档的JavaScript库。D3帮助你使用HTML,SVG和CSS生动地展现数据。D3不需要你使用某个特定的框架,它的重点在于对主流浏览器的兼容,同时结合了强大的虚拟化组件,以数据驱动的方式去操作DOM。
  • D3.js由Mike Bostock基于他在斯坦福可视化小组的工作开发,现由其所在的纽约时报赞助。很多贡献者参与到项目的开发,你可以在github上找到这个项目。
  • D3.js是指Data Driven Documents。当你的网页想要和数据进行交互时,D3是个好的选择。
  • D3.js被应用到web应用的前端,即用户交互部分。

数据可视化流程

Ben Fry数据可视化流程:

  • 获取
  • 解析
  • 过滤
  • 挖掘
  • 呈现
  • 提炼
  • 交互

基本构建模块

  • 现代浏览器
  • HTML
  • CSS
  • Javascript
  • DOM
  • SVG
  • Web Inspector

D3第一步

  • 在HTML文件中引用云端或本地js库
  • 在Web Inspector控制台中测试

添加DOM元素

  • select
  • append

添加SVG元素

  • js的分行特性
  • =style=操作符
  • 链式语法
  • =select=可以被保存赋值

将数据绑定到DOM元素上

  • selectAll
  • =data=操作符
  • 虚选择--Thinking with Joins
  • =enter=/=exit=/update
  • 对虚选择的=append=
  • =text=操作符
  • 数据在=_data__=属性中

使用在DOM元素中的数据

  • 向D3.js操作符参数传递函数,
  • 函数第一个参数是=_data__=内容。

使用数据来可视化

基于数据创建SVG元素

  • 创建SVG容器
  • 创建形状元素,比如=circle=
  • 将数据绑定到形状元素(基本靠虚选择完成)
  • 使用=style=利用数据修饰SVG元素

使用SVG坐标空间

  • 一图胜千言:

    -----------------–—> x | o | | | | | | | | v y

  • =append('svg')=作为坐标空间
  • 在SVG坐标空间内放置SVG元素。=attr=
  • 创建SVG元素放置SVG元素
  • 将数据绑定到SVG元素上
  • 利用绑定的数据改变SVG元素的位置
  • 使用绑定的数据修饰SVG元素

D3.js接受的数据结构

  • =select=到的是数组
  • D3可以加载外部资源,好多种类
  • JSON(key一定是字符串)
  • JSON数组

使用D3.js简化代码

  • 将JSON对象绑定到=_data__=属性上
  • 使用绑定的JSON对象变更SVG元素

SVG基本形和D3.js

流程固定,设置svg容器,绑定数据,append形状元素,设置必要属性和样式。

  • circle
  • rect
  • ellipse
  • line
  • polyline/polygon

SVG Path和D3.js

  • 一个用来画画的SVG内置语言
  • 使用D3.js生成形状元素绘制程序(D3.js Path 数据生成器)

动态SVG坐标空间

论如何通过遍历所有数据找到图像边界。

D3.js缩放

将某个Domain映射到一个Range上的对象/类/函数。

  • d3.scale.linear.domain([1,100]).range([0,1])
  • d3.max
  • d3.min
  • 还有些其它量化的和非量化的缩放。

SVG Group元素和D3.js

  • 可嵌套的=<g>=用来分组
  • =transform=属性和从右到左执行各种tranforming(matrix/translate/scale/skewX/skewY)
  • transform的转换是相对空间坐标的转换
  • 使用D3.js来分组SVG元素(append)
  • 使用D3.js来转换SVG元素(attr)

SVG Text 元素

  • =text=标签及属性, 比如=text-anchor=属性
  • 使用D3.js创建Text元素,绑定数据,使用数据。

SVG坐标轴元素

  • D3的坐标轴组件,包括水平与竖直坐标轴线、刻度、合适的分隔空间等等。
  • 坐标轴可以更清晰展现变量大小和关系
  • 坐标轴的范围,是否反转、类型、单位等
  • 生成D3.js坐标轴函数(d3.svg.axis().scale($SCALE))
  • 调用坐标轴函数(var xAxisGroup = svgContainer.append("g").call($FUNCTION);)生成坐标轴元素组。
  • 最后创建坐标轴(最上层)

然后忽然没了?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

准备继续看Scott Murray的D3.js教程