我目前正在使用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"; }
我得到了交替的红色和蓝色圆圈,这是可以预料的。
从嵌套选择:“嵌套和索引”中获取了一些建议后,我尝试了以下方法:
circles.enter().append("circle")
.attr("r", 3.5);
.style("fill", function(d,i,j) { return j%2 ? "red" : "blue"; }
这段代码不起作用(j未定义),可能是因为我们在命名属性datapoints中,而不是数组元素中。如何在不改变数据结构的情况下实现所需的着色?谢谢!