可能是微不足道的,但我似乎有一个嵌套的数据情况,我找不到任何指导。我有一个数组代表一个时间进程(索引),数据只是间歇性地可用:
elem[..]
elem[55].path[..]
elem[56]
elem[57]
elem[58].path[..]
elem[59]
elem[60].path[..]
elem[..]
空数据点为空:
elem[count] = null;
..而在待进一步使用之前,路径元素使用以下方式初始化:
elem[count].path = [];
收集大型数据集。在以下两个代码块的第一个中,我选择数组索引
classes[chan_index].elem_num_container = "elem_num_container" + "_" + comp_id + "_" + chan_index;
chan_selector.elem_num_container[chan_index] = chan_selector.vis_container[chan_index]
.selectAll(classes[chan_index].elem_num_container)
.data(function(d, i) {
return d;
})
.enter()
.append("svg:g")
.attr("class", function(d, i) {
return classes[chan_index].elem_num_container;
});
鉴于如此多的null元素,在第二个块(下面)中,嵌套的d.path可以理解地引发“groupData未定义”错误。
classes[chan_index].path_container = "path_container" + "_" + comp_id + "_" + chan_index;
chan_selector.path_container[chan_index] = chan_selector.elem_num_container[chan_index]
.selectAll(classes[chan_index].path_container)
.data(function(d, i) {
return d.path;
})
.enter()
.append("svg:g")
.attr("class", function(d, i) {
return classes[chan_index].path_container;
});
基本上,它归结为根据“d”参数选择数据,然后是“d.value”的嵌套选择。在保留索引的同时,我需要左右执行错误并选择存在的d.path元素。
我看到很多嵌套的JSON数据示例,但没有适用于这种情况。
封锁,并感谢任何帮助.. THX
答案 0 :(得分:1)
从上面的回答中,消除空元素显然是可行的,对输入数据(检查:一切正常)和d3处理层次结构产生怀疑(格式错误:两个处理分支挂在同一节点上,一个传播数据,另一个 - 上面提到的分支 - 不是。)
作为回应,使用新的,间隙svg:g容器结构将两个分支与其父分开。结果:两个分支上的数据。
然后,正如上面的回答中所建议的,使用d.path,我在处理分支上添加了一个过滤器(即原始问题中的第一个和第二个代码块之间),格式为:
chan_selector.temp[chan_index] = chan_selector.elem_num_container[chan_index]
.filter(function(d) { return typeof(d.path) === 'object'; });
奇怪的是(鉴于过滤器对索引的影响)它起作用,给出习惯的d3 eyecandy。 : - )
感谢Superboggly和Lars Kotthoff的宝贵帮助和耐心。