我在使用 d3 的符号机制为每组数据指定唯一符号时遇到问题。数据是这样的: [[{x: 1, y:1},{x: 2, y:2},{x: 3, y:3}], [{x: 1, y:1},{ x: 2, y:4},{x: 3, y:9}] 等]
写出符号的代码部分如下所示:我为每个点向量创建一个系列组。然后:
series.selectAll("g.points")
//this selects all <g> elements with class points (there aren't any yet)
.data(Object) //drill down into the nested Data
.enter()
.append("g") //create groups then move them to the data location
.attr("transform", function(d, i) {
return "translate(" + xScale(d.x) + "," + yScale(d.y) + ")";
})
.append("path")
.attr("d", function(d,i,j){
return (d3.svg.symbol().type(d3.svg.symbolTypes[j]));
}
);
或者至少我希望它是这样工作的。问题是我不能从另一个函数返回函数 d3.svg.symbol() 。如果我尝试仅将函数放在“类型”参数中,则数据的范围不再正确,无法知道 j 是什么(系列的索引)。
对,但我不想要每个数据点都有一个唯一的符号,我想要每个系列都有一个唯一的符号。数据由多个数组(系列)组成,每个数组可以有任意数量的点 (x,y)。我想为每个数组使用不同的符号,这就是 j 应该给我的。我将数据(在示例中显示了两个数组,因此 i 为 0 然后为 1)与系列选择相关联。然后我将数据对象与点选择相关联,因此 i 成为每个数组中点的索引,而 j 成为原始数组/数据系列的索引。我实际上是从其他地方复制了这个语法,它适用于其他实例(例如,在分组条形图中着色一系列条形),但我无法确切告诉你它为什么起作用......
任何指导将不胜感激。谢谢!