我目前正在从格式如下的 JSON 对象数组的数据点组装一些带有圆圈的折线图:
var data = [{
"name": "metric1",
"datapoints": [
[10.0, 1333519140],
[48.0, 1333519200]
]
}, {
"name": "metric2",
"datapoints": [
[48.0, 1333519200],
[12.0, 1333519260]
]
}]
我想为每个指标设置一种颜色,因此我尝试根据数组数据中对象的索引为它们着色。我目前用于放置圆圈的代码如下所示:
// We bind an svg group to each metric.
var metric_groups = this.vis.selectAll("g.metric_group")
.data(data).enter()
.append("g")
.attr("class", "metric_group");
// Then bind a circle for each datapoint.
var circles = metric_groups.selectAll("circle")
.data(function(d) { return d.datapoints; });
circles.enter().append("circle")
.attr("r", 3.5);
现在,如果我将最后一点更改为:
circles.enter().append("circle")
.attr("r", 3.5);
.style("fill", function(d,i) { return i%2 ? "red" : "blue"; }
正如所料,我得到交替的红色和蓝色圆圈。
从Nested Selections : 'Nesting and Index'中得到一些建议,我尝试了:
circles.enter().append("circle")
.attr("r", 3.5);
.style("fill", function(d,i,j) { return j%2 ? "red" : "blue"; }
哪个不起作用(j 未定义),大概是因为我们在命名属性数据点中,而不是在数组元素中。我如何在不改变数据结构的情况下进行我想要的着色?谢谢!