原文链接 http://alignedleft.com/tutorials/d3/
应该是这本书
解答我很多关于d3机理的困惑
然后是07 Using your data
1、Using your data
代码
var dataset = [ 5, 10, 15, 20, 25 ];
d3.select("body").selectAll("p")
.data(dataset)
.enter()
.append("p")
.text(function(d){ return d; });
和06的代码比仅仅最后一行代码换了
这里令人困惑的是function(d)的参数d。只要在链条上使用了 data()函数,之后任何时候都可以创建一个把d作为输入的无名函数。 data()函数会确保d的值被设置成原有dataset中对应的值,给予当前最近的元素。
当前元素的值会随着D3循环每个元素而变化。举个例子:当循环到第3次,我们的代码会创建第3个p标签,而d将会对应dataset中的第3个值(dataset[2])。所以第3个p的text获得赋值15.
2、数据必须被持有
这个参数d只能通过无名函数传参的形式获得,此外的形式是无效的,比如
.text("I can count up to " + d);
这样行不通。
这样规定语法的原因是text(), attr(),和许多其他方法会采用一个函数作为一个参数。
比如,text() 即可以使用一个静态字符文本作文参数:
.text("someString")
也可以使用一个函数:
.text(someFunction())
或者一个匿名函数本事也可以是一个参数,比如:
.text(function(d) {
return d;
})
Above, you are defining an anonymous function. If D3 sees a function there, it willcall that function, while handing off the current datum
das the function’s argument. Without the function in place, D3 can’t know to whom it should hand off the argumentd.At first, this may seem silly and like a lot of extra work to just get at
d, but the value of this approach will become clear as we work on more complex pieces.
在前面,你定义了一个匿名函数。如果D3看到那里有一个函数,它会调用那个函数,同时传递了当前的数据d作为函数的参数。如果那里没有函数。D3将不知道把参数d传给谁.
3、对于Text更进一步研究
attr() 和 style())独立的设置HTML和CSS属性的时候,事情变得越来越好玩了。
比如,在我们代码最后一行添加代码
.style("color", "red");
效果图:
所有的问题都变红了,很好的表换。更重要的是,我们可以使用一个自定义的函数来设定文字颜色,仅仅当数据超过一定阀值时才会变红。因而,我们重写最后一行代码,使用如下函数
.style("color", function(d) {
if (d > 15) { //Threshold of 15
return "red";
} else {
return "black";
}
});
效果图:
我们可以看到前3行是黑的,但是一旦超过规定的阀值15,text变红。
下一讲,我们会使用attr()和style()来操作divs,产生一个简单地条形图----我们第一个可视化产品!
本文介绍D3.js中的数据绑定方法,并演示如何利用数据驱动文档生成元素及设置样式。通过实例展示了如何使用匿名函数处理数据,并实现条件样式设置。
3584

被折叠的 条评论
为什么被折叠?



