D3js循环散点图的可变长度系列
D3js loop through variable length series for scatter plot
我的数据可以有可变数量的系列。在每个系列中都有一个日期和数字,我想在 D3js 中将其绘制为散点图。
这是我的(非工作)代码。当我直接这样做时它会起作用,但一旦我添加 $.each 循环就不会起作用。我很确定索引或类似问题存在某种问题。
var color = d3.scale.category20();
// Now actually add the data to the graph
$.each(mpgData, function(k, v) {
console.log(v);
//console.log(k);
svg.selectAll('circle')
.data(v)
.enter()
.append('circle')
.attr('cx', function(d, i) {
console.log(i);
//console.log(d);
return xScale(getDate(d[1]));
})
.attr('cy', function(dd, ii) {
//console.log(ii);
return yScale(dd[2]);
})
.attr('fill', function(d, i) {
return color(k);
})
.attr("class", "mpgColorClass"+k)
.attr("r", 5)
.on("mouseover", function() {
d3.selectAll(".mpgColorClass"+k)
.attr("r", 8);
})
.on("mouseout", function() {
d3.selectAll(".mpgColorClass"+k)
.attr("r", 5);
});
});
我只展示了我认为相关的部分。
这样代码就可以工作了。但它只显示了 6 个东西,我认为这是因为第 2 个 'series' 有 6 个项目。所以不知何故,它并没有遍历“attr('cx', function(d, i)) 部分的所有内容。我想我不明白如何让该函数遍历系列的每个部分。
我是 D3js 的新手,所以仍在努力学习。但它有效,我得到了一张包含正确数据的图表。它只是不是所有数据,整个(可变)数据集中只有 6 个点。
谢谢!
在您的 $.each() 块中,您将覆盖 SVG 元素中的同一组圆圈。因此,您可以这样做,而不是使用 selectAll('circle'):
$.each(mpgData, function(k, v) {
svg.selectAll('circle' + k)
.data(v)
.enter()
.append('circle')
.attr('class','circle' + k)
});
截断了代码中的其余详细信息...随意编辑。
我的数据可以有可变数量的系列。在每个系列中都有一个日期和数字,我想在 D3js 中将其绘制为散点图。
这是我的(非工作)代码。当我直接这样做时它会起作用,但一旦我添加 $.each 循环就不会起作用。我很确定索引或类似问题存在某种问题。
var color = d3.scale.category20();
// Now actually add the data to the graph
$.each(mpgData, function(k, v) {
console.log(v);
//console.log(k);
svg.selectAll('circle')
.data(v)
.enter()
.append('circle')
.attr('cx', function(d, i) {
console.log(i);
//console.log(d);
return xScale(getDate(d[1]));
})
.attr('cy', function(dd, ii) {
//console.log(ii);
return yScale(dd[2]);
})
.attr('fill', function(d, i) {
return color(k);
})
.attr("class", "mpgColorClass"+k)
.attr("r", 5)
.on("mouseover", function() {
d3.selectAll(".mpgColorClass"+k)
.attr("r", 8);
})
.on("mouseout", function() {
d3.selectAll(".mpgColorClass"+k)
.attr("r", 5);
});
});
我只展示了我认为相关的部分。
这样代码就可以工作了。但它只显示了 6 个东西,我认为这是因为第 2 个 'series' 有 6 个项目。所以不知何故,它并没有遍历“attr('cx', function(d, i)) 部分的所有内容。我想我不明白如何让该函数遍历系列的每个部分。
我是 D3js 的新手,所以仍在努力学习。但它有效,我得到了一张包含正确数据的图表。它只是不是所有数据,整个(可变)数据集中只有 6 个点。
谢谢!
在您的 $.each() 块中,您将覆盖 SVG 元素中的同一组圆圈。因此,您可以这样做,而不是使用 selectAll('circle'):
$.each(mpgData, function(k, v) {
svg.selectAll('circle' + k)
.data(v)
.enter()
.append('circle')
.attr('class','circle' + k)
});
截断了代码中的其余详细信息...随意编辑。