【D3.js 学习总结】2、D3数据绑定

我们从Hello World示例代码来看D3如何做数据绑定

    var demo = d3.select('body')
        .selectAll('p')
        .data(data, function (d) {
          return d;
        });

这段代码执行了以下步骤:

1、通过 d3.select('body’) 将页面上的body标签选中;
2、selectAll('p’) 返回了一个p标签的空选集(selection);
3、空选集通过 data() 方法将数据和p标签绑定,并产生三个虚拟的子集: enter, update, exit,其中enter()包含了待绑定数据及相应的p标签的占位符,update()包含了已绑定数据的p标签, exit ()包含了待移除数据p标签,我们通过一张图来形象的理解 enter, update , exit;

enter数据

    demo.enter()
        .append('p')
        .style('width', 0+'px')
        .style('background', '#eee')

这段代码为 enter() 中的占位符创建p标签,绑定相应的数据,并初始化样式;

update数据

    demo
        .text(function (d) {
          return d;
        })
        .transition()
        .duration(1000)
        .style('width', function (d) {
          return d+'px';
        })

这段代码为 update() 中的p标签写入数字文本,并绑定transition动画,使它以动画形式展现;
是不是没看到 update() 的影子,没关系,update()会被隐式调用,之所以前面要提到 update 是为了更好的理解这三种状态;

exit数据

    demo.exit()
        .transition()
        .duration(1000)
        .style('width', 0+'px')
        .remove();

这段代码为 exit() 中的p标签绑定transition动画,使它以动画形式移除;

D3的这种数据绑定方式的设计,使enter()里只是专心处理新增的元素,而update 和 exit分别专注于处理更新和待删除部分,这意味着你不用把所有DOM元素删了重绘,因此得以轻松应对实时变化的数据,甚至支持一些交互(如拖动)与渐变的效果!

时间: 2024-09-17 12:28:59

【D3.js 学习总结】2、D3数据绑定的相关文章

【D3.js 学习总结】4、D3 创建SVG

D3图表大都是由SVG来实现的,所以在继续学习前需要了解一些SVG的知识,可以通过看svg教程来学习一下. D3可以生成一般的SVG形状,它也内置了很多SVG图表,方便我们直接生成实用的图表. 我们先来创建一个SVG容器,其它SVG图形都需要在容器里来创建: var body = d3.select('body'); var svg = body.append('svg').attr('width',200).attr('height',200); 普通SVG 用D3来生成一般的SVG图形,可以

【D3.js 学习总结】1、初识D3

D3是指数据驱动文档(Data-Driven Documents),根据D3的官方定义: D3.js是一个JavaScript库,它可以通过数据来操作文档.D3可以通过使用HTML.SVG和CSS把数据鲜活形象地展现出来.D3严格遵循Web标准,因而可以让你的程序轻松兼容现代主流浏览器并避免对特定框架的依赖.同时,它提供了强大的可视化组件,可以让使用者以数据驱动的方式去操作DOM.----D3维基(2013年8月) 从一个Hello Wordld示例来看看d3如何运行 点击查看在线DEMO fu

【D3.js 学习总结】21、D3交互事件

前20节中,我们讲了各种静态D3图表的制作,好的图表应该是要与用户进行互动的,这节来讲讲D3的交互事件: d3.event selection选择器事件监听的写法跟平时我们用的jQuery类似,如: selection.on('click',function(d,i){ alert('ok'); }) 但请注意,点击事件触发的匿名函数参数不是我们常用的e或event,而是绑定在选择器上的数据d和数据的序列号i,这点非常重要. 注册事件 我们只要调用全局对象d3.event,它是DOM事件,并实现

【D3.js 学习总结】26、D3地理地图

d3.geo 在学习D3如何制作地图前,我们需要了解下地图的数据格式geoJSON,GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法的地理空间信息数据交换格式. 本节我们将制作一幅中国地图,使用到的地图数据文件是从 Natural Earth 上的获取,经过提取后制作而成的,在本节入门篇中不细述地图数据的获取过程,将直接使用已经做好的数据,可通过以下链接下载查看中国地图数据. China GeoJSON 1.加载数据 d3.json('geoChina.j

【D3.js 学习总结】5、D3 SVG图表示例

之前有说到"D3制作图表的过程就是将各种SVG图形拼接在一起的过程",具体来说折线图表就是折线图+坐标轴的组合,面积图是折线图+坐标轴+面积图 一个完整的SVG图表,是包含了各种数据.SVG图形.样式.交互组成的组合体,我们以面积图表来做一个示例展示: CSS svg{ font-size: 12px; } .line{ fill:none; stroke-width:1; stroke:#000; } .axis line{ stroke: #000; stroke-width: 1

【D3.js 学习总结】10、D3布局-力学图

d3.layout.force() 力学图(也称为导向图,也有叫网络拓补图的,反正就是通过排斥得到关系远近的结构)在社交网络研究.信息传播途径等群体关系研究中应用非常广泛,它可以直观地反映群体与群体之间联系的渠道.交集多少,群体内部成员的联系强度等. 力学(Force)的API说明 force.on - 监听布局位置的变化.(仅支持"start","step","end"三种事件) force.nodes - 获得或设置布局中的节点(node)阵

【D3.js 学习总结】14、D3布局-打包图

d3.layout.pack() 打包图用于表示包含与被包含的关系,也可表示各对象的权重,通常用一圆套一圆来表示前者,用圆的大小来表示后者. 打包图(Pack)的API说明 pack.children - 取得或设置子节点的访问器. pack.links - 计算树节点中的父子链接. pack.nodes - 计算包布局并返回节点数组. pack.padding - 指定布局间距(以像素为单位) pack.radius - 指定节点半径(不是由值派生来的) pack.size - 指定布局尺寸.

【D3.js 学习总结】11、D3布局-弦图

d3.layout.chord() 弦图是一种用于描述节点之间联系的图表. 弦图(Chord)的API说明 chord.chords - 取回计算的弦角度. chord.groups - 取回计算的分组角度. chord.matrix - 取得或设置布局需要的矩阵数据. chord.padding - 取得或设置弦片段间的角填充. chord.sortChords - 取得或设置用于弦的比较器(Z轴顺序). chord.sortGroups - 取得或设置用于分组的比较器. chord.sort

【D3.js 学习总结】8、D3布局介绍

布局是 D3 中一个十分重要的概念,可以理解成 "制作常见图形的函数",有了它制作各种相对复杂的图表就方便多了. D3 与其它很多可视化工具不同,相对来说较底层,对初学者来说不太方便,但是一旦掌握了,就比其他工具更加得心应手. 下图展示了 D3 与其它可视化工具的区别: 布局的作用是:将不适合用于绘图的数据转换成了适合用于绘图的数据. D3 总共提供了 12 个布局: 饼状图(Pie) 力导向图(Force) 弦图(Chord) 捆图(Bundle) 直方图(Histogram) 堆栈