d3.js 使用方法 从0起步个人学习过程(1)

注意:所有资料均是从d3手册翻译而来

刚开始学习d3发现最大的问题是手册都英文的,有中文翻译,但是是针对API的,这个对于刚开始初学者很不方便,所以,个人在边学的过程中,把学过的部分翻译下来,以便英文不好的童鞋参考

Three Little Circles   三个小圆


这是用SVG画的三个小圆,


效果如上

也可参考手册,因为测试,所以跟手册上的效果会不一样

Selecting Elements

选择元素,这一步了解d3的选择器的使用,这个很简单,就跟jquery 的用法差不多,很方便 


这是手册上的案例,看代码也都能看懂了,

d3.selectAll("circle")  就是d3的选择器,选择文档中的所有circle元素, 然后对其进行属性的修改,

circle. style  类似  jquery 的  style,或者 css 方法 ,设定选择元素的样式,attr  设定属性值,

和jquery 的attr  用法基本上一致

匿名方法


在设置属性或者样式的时候,可以使用一个匿名方法来对其值进行处理,尤其是 图形的比例尺寸 和 形状方面,使用比较多

数据绑定


这个是整个d3的核心,d3使用的是svg的方式来绘制图形,这个有个很大的好处主是图形的交互性,你可以随时给绘制的图形绑定一个事件,比如:点击,鼠标移过等,这方面使用canvas方式来绘制就不容易实现 

什么是数据绑定:就是每个数据对应一个选择的元素,比如上面:有三个圆,那么数据绑定的时候设定一个数组,对应三个值,每一个值就对应一个圆,数值越大,圆越大,  data方法里传递一个数组,数组元素依次对应每个圆,注意:数组元素和圆是顺序对应的


上面的例子就是数据绑定后,然后把数组里面的值依次传递到匿名方法里面进行处理,

d:代表数组里面传递过来的值,

i: 代表第几个元素,即数组的索引值


上面这段是本人开始练习时的测试用例,

seletc 是选择单个元素

进入元素


这段意思就是:在实际使用中,我们可能不止3个圆,会有多个圆,但我们在SVG中,只初始化了3个,那么当我们需要4个或者更多的时候怎么办?比如:我有1000个数据,你不可能在文档里, 写1000次circle, 这个不现实,那怎么办?

可以用强大的enter() 选择器,这个选择器就是当你有N多个数据的时候,我可以先给每个数据开辟一个空的占位符, 至于这个空占位符,你是放圆,还是放正方形还是放长方形,都无关紧要,反正你有多少个数据,我就除开你已经画了的图形外,剩下的我就给你多少个占位符。等下你自己去填充。


这是我的测试案例,效果如下:


退出元素

这个就是当我们不需要其中一些已经存在的图形的时候,我们该如何删除?

这个时候就可以使用exit选择器,注意:使用exit 的时候,顺序和enter 是一样的,是依次对应的


这是删除案例,效果如下


总结

这段话原文翻译:

回顾一下,想想从绑定数据到元素,可能的三种结果:

1、enter - 即将加进来的元素   ,enterign 阶段

2、update - 一直存在的元素, staying 阶段

3、exit - 即将移除的元素, exiting 阶段

默认数据绑定依次进行:第一个元素绑定到第一个数值,依次类推。因此,enter 和 exit 选择器 其中一个或者都会为空。如果数据比元素多,则多余的数据会放在enter 选择器中。如果数据比元素少,则多余的元素会放在 exit 选择器中。

你可以通过指定 键函数 到  select.data 中以精确的绑定数据到对应的元素。例如:通过使用标识函数,你可以把圆重新绑定到对应的新数据中,同时确保已经存在的圆被绑定到新数据中的值是一样的

上面这段话大家自己可以再理解,反正一个中心意思就是给 data([ ]) 加一个方法,可以保证数据能够准确的重新绑定!

下面是我的测试:


我先给data 加个方法 后,效果如下:


原本是6个圆,3黑3红,现在加了data 的键方法后,数据重新绑定了,每个数据绑定一个圆,注意:为了使圆的区别大些,我把处理半径的Math.sqrt(d)  修改成了  d / 5

下面接着我同样删除其中2个圆,按照之前的写法如下:


看看效果如下:


这时发现我们删除掉2个后 剩下的 点变成3黑一红,原来是6个红色的圆,3个黑色的圆, 为什么6个红圆只剩下一个呢,明明我们只删除了2个的啊?原因很简单,data  没有加 键方法,导致数据没有重新绑定,且圆和数组的值没有一一对应,那么我们继续给data 加个键方法看看效果如下:


效果如下:

这个结果就是比较符合我们的需求的,我只需要删除2个红圆,剩下的都不需要了,删除,剩4个红圆

这是第一部分的学习成果,希望对有同样需要学习需求的猿们能够有一定的帮助

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容

  • d3 (核心部分)选择集d3.select - 从当前文档中选择一系列元素。d3.selectAll - 从当前文...
    谢大见阅读 3,441评论 1 4
  • 1.发现故事 本课讲述可视化用到的:叙事结构数据收集过程数据处理 2.新闻方法 给可视化添加语境围绕数据进行叙事 ...
    esskeetit阅读 2,816评论 0 2
  • 对集合的操作 关于d3.attr 一个可以处理很多情况的函数,当只传入一个参数时,如果是string,则返回该属性...
    陈坚生阅读 2,528评论 0 2
  • 1. 动画与互动 在叙事结构中全面应用创意D3如何帮你在可视化图表中添加动画与互动用地理特征创建D3地图了解别人如...
    esskeetit阅读 834评论 1 0
  • 今天晨读分享的书是《大思想的神奇》,书中提到了一个最简单的取胜之道:提升格局,让我们短时间成为人生赢家。 001修...
    大Coco的中文叫韩大脸阅读 179评论 2 5