您可以将数据以 .json 格式引入,压缩各种数据元素,并将 .data() 传递给整个数据集。我认为以下内容也适用于您的过滤器。我将解释这一点,就像您将数据(不一定是过滤的)作为一个整体引入一样。希望这将阐明如何将 .data() 用于 d3 中的关联数据。
data.json 示例:
{
"property1":[0, 0, 0, 0],
"property2":['name1', 'name2', 'name3', 'name4']
}
以 .json 格式引入数据:
d3.json("data.json", function(data) {
// zip the two (or more) attributes of your data
data = d3.zip(data.property1, data.property2).map(function(d) {
property1 = +d[0];
property2 = +d[1];
// return object for each property
return {prop1: property1, prop2: property2};
});
}
然后 .data() 可以得到那个 zip:
.data(data)
您一次只能调用一个数据属性:
// histogram example
d3.layout.histogram()
.bins()
.value( function(d) { return d.attr1; })
(data)
你看到.value 是如何只返回 zip 的一个属性的吗?但其他属性仍然关联。您可以拥有多个属性,将一些属性用于您可能正在执行的任何计算,然后将其他属性用作这些数据属性的元数据,因为它们都被压缩在一起,为您提供了一个不错的小包。
另一种选择是将一个数组/数据传递给 .data() 并为另一个使用索引。
此处列出的两个选项:
d3 array input line graph example
这里有前者的详细例子:
http://bl.ocks.org/patrickberkeley/9162034
我认为这些概念就是您所追求的。让我知道我是否错了。