D3.js data() 方法详解
Binding data(数据绑定)
D3各种图表的作用体现在将数据(Data)转换成可视化的过程。
比如将一个月的气温数据,通过树形图来展现,能够直观的看到气温走势,下个月还需不需要穿秋裤 :)
我们通过D3的 selection.data() 方法来将 data 绑定到 DOM 元素。因此,一个绑定过程的必要条件既是:data 和 DOM目标元素(没有目标元素,你还bind个卵~)。
从Data说起...
D3还是很聪明的,可以处理多种data类型,像数组、字符串、对象类型。同样可以优雅的接受JSON,更牛B的是它拥有自己的内部方法,可以直接加载CSV文件(当然需要load CSV文件就不是我们在桌面创建个index.html然后用chrome打开那么easy了,你需要一个应用server,通过http还是https来获取CSV并加载了)。
这里我们先准备一个简单的数组吧
var dataset = [1, 2, 3, 4, 5];
既然上面都有一行code了,看了免不了还要写点代码了。我们要把上面的数组跟谁绑定呢?
d3.select("body").selectAll("p")
你会说p都没append,哪来selectAll("p"),这是个问题,D3当然考虑到这一点了啊
d3.select("body").selectAll("p")
.data(dataset)
.enter()
.append("p")
.text("say say say you love me");
enter()是个神奇的方法,运行上面的代码,你的页面应该打印出5行 "say say say you love me", 不顾一切,狠狠爱(有没有一种忍不住唱出了的冲动)
d3.select("body") // 查找DOM中的body元素,返回body的引用
.selectAll("p") //选中DOM中的所有p标签,当DOM中不存在p时,那么这个返回值将是null
.data(dataset) //计算并且传递dataset的纸,数组长度为5,因此所有经过此节点的处理过程将处理5次,每次对应数组中不同的元素值
.enter() //创建新的DOM元素,当dataset的数据被传递至此,数组中的元素个数多于DOM中已有的p个数,enter()将会创建新的p元素来补充(推荐Google一下enter()和exit()具体使用方法)
.append("p") //这里的p当然就是不够分时就创建一个的意思啦。。。
.text("say say say you love me") //这个谁给解释一下 :o
使用你的Data...
完成了上面的逻辑,你应该会问 “本吊load上了data,仅仅只是for-each一下?”
非也,下面我们开始使用上面load的数据
d3.select("body").selectAll("p")
.data(dataset)
.enter()
.append("p")
.text(function(d){return "say say say you love me "+d+" times"}); //方法中的参数d既是dataset中对应索引位置的元素值
// .text(function(d, i){return "sample"}) 这里可以看到另一个参数i, i在此处的值表示的是当前 d 元素在 dataset 中的索引位置
通过上面一段代码,任何时候,在调用data()方法之后,创建匿名方法,并将d作为参数传递进去,data() 方法将可以保证每次传递进去的参数 d 是 dataset 中对应的元素。好吧,我承认上面text()中定义的匿名函数有点low,不够炫酷。。。
在text()方法中,心细的你也许会有疑问,为什么不直接写 .text("say say say you love me "+d+" times"); 原因是D3的许多方法,包括 .text() / .attr() 等它们都可以将一个方法作为参数,当然参数也可以是一个字符串(不包含运算的)。
关于除 array 以外的数据结构处理方式在实际应用中使用的并不是很多,比如简单的 key/value 对象类型,我们可以通过 d3.keys(data) 方法来获取各个value值。实际应用中还是需要根据自己的实际需求来组织便于处理的数据结构。
以上仅仅是一个D3内置data()方法的简单总结,便于快速入门,D3的高深远不止于此。拙笔之作,不对之处望海涵 :)
更多data()方法精妙解释和高级用例: http://alignedleft.com/tutorials/d3/binding-data
D3.js data() 方法详解的更多相关文章
- Js apply 方法 详解
Js apply方法详解 我在一开始看到JavaScript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...
- Js apply方法详解,及其apply()方法的妙用
Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...
- js数组方法详解
Array对象的方法-25个 /*js数组方法详解 */ /* * 1 concat() 用于连接多个数组或者值-------------- * 2 copyWithin() 方法用于从数组的指定位置 ...
- JS reduce()方法详解,使用reduce数组去重
壹 ❀ 引 稍微有了解JavaScript数组API的同学,对于reduce方法至少有过一面之缘,也许是for与forEach太强大,或者filter,find很实用,在实际开发中我至始至终没使用过 ...
- js数组方法详解(最新最全)
数组是js中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响.本文所有的栗子都是在es7环境下测试的,如果有问题欢迎留言交流 ...
- Js apply方法详解
我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家 ...
- 缓冲加载图片的 jQuery 插件 lazyload.js 使用方法详解
在写代码的时候,经常会用到懒加载的模式,以前是通过window.onload的模式去加载,但是图片很多或者用ajax请求的时候,就会很麻烦,现在用lazyload的模式加载方便很多 <!doct ...
- [荐]Js apply()和call()方法详解 - http://www.w3cfuns.com/article-5596443-1-1.html
本帖最后由 默默DE人生 于 2013-3-19 13:22 编辑 Js apply方法详解我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文 ...
- Js apply call方法详解
Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...
随机推荐
- virtual pc中添加软盘支持
最近对操作系统挺有兴趣的,实验了一下!准备找一个虚拟机,之前在xp上使用virtual pc感觉不错,准备在本机上装一下,但是发现居然不支持软盘了! 查阅了各种资料,终于找到了解决的办法. 1. 下载 ...
- 使vim中Syntastic支持C++11
安装好Syntastic后发现不支持c++11,会提示错误incompatible with c++98,解决方法如下: .vimrc中加入: let g:syntastic_cpp_compiler ...
- Entity Framework With Mysql 之Code First
Entity Framework 4.0现在也可以支持Mysql数据库了,这篇文章将向你展示如何用Code First的方式来实现. 1.首先新建一个项目,在项目中用NuGet添加如下引用: 2.在w ...
- Chrome下的语音控制框架MyVoix.js使用篇(三)
上篇文末已经提及,google分析出的单词可能和大家预想的输入有差别.上文我们通过预先绑定多个语音指令,权益地解决了这个问题.在这一章,我将介绍myvoix.js框架自带的smart learning ...
- 利用GPS获取行车速度和距离
这几天项目中需要GPS计算汽车的速度和行驶距离,这里简单记录一下使用过程 1 和平常使用地图一样,在Info.plist中添加位置请求 2 在viewdidLoad中初始化locationManage ...
- Codeforces 56D Changing a String
http://codeforces.com/contest/56/problem/D 题目大意: 一个字符串变为目标字符串,可以执行插入,置换和删除3种操作,求最少操作数. 思路:dp[i][j]代表 ...
- Window Ghosting(仍可拖动失去响应的窗口,因为我们真正的窗口已经让系统用Ghosting窗口替代了。使用IsHungAppWindow 探测)
最近工作中遇到Window Ghosting这个问题, 感觉挺有意思,这里简单记录下. 在XP时代我们的程序没有响应后只能通过任务管理器强制杀掉,但是Vista之后情况变了, 我们仍然可以拖动 ...
- 【Xamarin For IOS 开发需要的安装文件】
官网安装文件下载: http://download.xamarin.com/XamarinforMac/Mac/xamarin.mac-2.0.1.64.pkghttp://download.xama ...
- 使IE6支持:hover效果
:hover是在CSS中用来制作效果最常用到的一个伪类,比如:标签或div上的鼠标悬停效果 li:hover,div:hover等. 但这种效果是css2及以上版本才添加的,对于只支持css1的浏览器 ...
- BaseAdapter自定义适配器——思路详解
BaseAdapter自定义适配器——思路详解 引言: Adapter用来把数据绑定到扩展了AdapterView类的视图组.系统自带了几个原生的Adapter. 由于原生的Adapter视图功能太少 ...