gpt4 book ai didi

javascript - d3 : Coloring Multiple Lines from Nested Data

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:51 24 4
gpt4 key购买 nike

我目前正在从格式如下的 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 未定义),大概是因为我们在命名属性数据点中,而不是数组元素中。我怎样才能在不改变数据结构的情况下进行我想要的着色?谢谢!

最佳答案

这里最简单的做法是让圆圈从父 G 元素继承填充样式:

var color = d3.scale.category20();

var metricGroup = vis.selectAll(".metric-group")
.data(data)
.enter().append("g")
.attr("class", "metric-group")
.style("fill", function(d) { return color(d.name); });

var circle = metricGroup.selectAll("circle")
.data(function(d) { return d.datapoints; })
.enter().append("circle")
.attr("r", 3.5);

如果您将分类颜色定义为 CSS 类,您还可以使用动态类名并以这种方式继承:

var metricGroup = vis.selectAll(".metric-group")
.data(data)
.enter().append("g")
.attr("class", function(d) { return "metric-group " + color(d.name); });

与相应的 CSS:

.metric1 circle { fill: red; }
.metric2 circle { fill: blue; }

另一种方法是使用 each访问父数据:

metricGroup.each(function(p, j) {
d3.select(this).selectAll("circle")
.data(p.datapoints)
.enter().append("circle")
.attr("r", 3.5)
.style("fill", color(p.name));
});

我还认为使用组索引 j 会起作用;我不确定为什么它对你来说是未定义的,但是你的代码示例中有一个虚假的分号(在 .attr("r", 3.5); 中),所以可能还有其他事情发生.无论如何,从数据而不是组索引中导出分类颜色更为惯用,因此我会使用上述技术之一。

关于javascript - d3 : Coloring Multiple Lines from Nested Data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com