Javascript D3退出选择错误的数据
我正在尝试使用D3.js构建一种实时图形。有关代码,请访问 源数据表示来自不同组织的用户身份验证结果。每个组织都有一个名称、ok计数和fail计数。图形应该根据数据动态更新(在循环中获取数据) 代码基于 没有什么问题,也没有什么事情我不确定 退出功能仅根据数据更新选择红色条:Javascript D3退出选择错误的数据,javascript,csv,d3.js,Javascript,Csv,D3.js,我正在尝试使用D3.js构建一种实时图形。有关代码,请访问 源数据表示来自不同组织的用户身份验证结果。每个组织都有一个名称、ok计数和fail计数。图形应该根据数据动态更新(在循环中获取数据) 代码基于 没有什么问题,也没有什么事情我不确定 退出功能仅根据数据更新选择红色条: // JOIN new data with old elements // specify function for data matching - correct? var boxes = svg.selec
// JOIN new data with old elements
// specify function for data matching - correct?
var boxes = svg.selectAll(".box").data(data, function(d) {
return d.inst_name;
});
// EXIT old elements not present in new data
// this works somehow strange
// it does select all red boxes
boxes.exit().transition(t).remove();
为什么exit()只选择红色条而不是全部?从我的理解来看,d3文档exit()应该只选择没有任何新数据的元素。在无限循环和常量数据文件的情况下,这不应该是所有的条吗
这显然破坏了很多图表(参见plunker)。我需要退出选择只有酒吧,这是不可用的数据文件了。见下面的例子
数据文件的初始状态:
inst_name,ok,fail
inst1,24,-1
inst2,23,-3
...
inst_name,ok,fail
inst1,26,-1
inst14,22,-4
...
数据文件的更新状态:
inst_name,ok,fail
inst1,24,-1
inst2,23,-3
...
inst_name,ok,fail
inst1,26,-1
inst14,22,-4
...
更新数据时,应移除初始状态下inst2的条形图(蓝色和红色),并替换为inst14的数据。为什么这不起作用
我已经读到,新数据通过索引与旧数据进行匹配。我已指定应使用inst_名称:
var boxes = svg.selectAll(".box").data(data, function(d) {
return d.inst_name;
});
这有必要吗(我在插入数据时到处都用过它)
此外,用于删除图元的转换也不起作用。有什么问题
我也不确定在添加新条时是否需要指定数据:
var boxes = svg.selectAll(".box").data(data, function(d) {
return d.inst_name;
});
.....
// add new element in new data
svg.selectAll(".blue")
.data(data, function(d) { // is this necessary ?
return d.inst_name;
}) // use function for new data matching against inst_name, necessary?
.enter().append("rect")
.transition(t)
.attr("class", function(d) {
return "blue box "
})
.attr("x", function(d) {
return x(d.inst_name);
})
.attr("width", x.bandwidth())
.attr("y", function(d) {
return y(d.ok);
})
.attr("height", function(d) {
return height - y(d.ok + min);
})
谢谢你的帮助
编辑
底层数据是通过脚本更改的(这在原始文章中没有写清楚),因此它可以独立于图形状态进行更改。数据应该只是在增长。你问了很多问题 为什么exit()只选择红色条而不是全部?从我的理解来看,d3文档exit()应该只选择没有任何新数据的元素。在无限循环和常量数据文件的情况下,这不应该是所有的条吗 首先,构建两组条形图(蓝色[ok]和红色[fail])。当您绑定这些数据时,您会给它们相同的名称,这通过
inst\u name
来标识它们。然后执行数据更新,现在可以使用以下命令一次选择所有条形图:
svg.selectAll(".box")
再次使用相同的键函数绑定数据。您的数据在数组中有10个值,但您刚刚选择了20条。第二个10条退出(红色条),因为它们不在您的10个数据点中
更新数据时,应移除初始状态下inst2的条形图(蓝色和红色),并替换为inst14的数据。为什么这不起作用
我看不出在你的Plunk中,你一遍又一遍地给它相同的数据
此外,用于删除图元的转换也不起作用。有什么问题
你还没有给过渡做任何事情。它将运行它,然后在最后删除矩形。您需要的是它的过渡,如“高度”:
这会将它们收缩到0高度
那么我们如何清理你的代码呢 首先,我将对
g
元素进行操作,每个元素与数据数组中的一个项配对。然后将属于该数据点的两个条放置在g
中。看一看,我已经开始清理您的代码(虽然不完整,但希望它能让您继续工作)。更新后正常工作。我已将失败数据更改为正。我仍然不知道为什么第144行和145行不适用。必须使用红色和第150行和151行。也有助于