use*_*313 5 javascript sorting d3.js circle-pack
我有一个数据集,当按升序排序时,圆圈最终"堆叠"但在使用空或降序排序时显示正确分布.



完整的例子在这里:http://jsfiddle.net/SXLHx/3/.
有人有建议吗?
sortItems = function(a,b) {
var str,result;
switch(sortOrder%3){
case 0:
str = 'ascending';
result = a.size - b.size;
break;
case 1:
str = 'descending';
result = b.size - a.size;
break;
default:
str = 'null';
result = null;
}
document.getElementById("sortLbl").innerHTML = str;
return result;
};
pack = d3.layout.pack().sort(sortItems);
Run Code Online (Sandbox Code Playgroud)
一些额外的信息:
我发现如果我删除至少两个具有值0的块条目(无论哪两个但它必须是两个),布局就可以了.http://jsfiddle.net/SXLHx/4/
此外,应用过滤器不附加0值的圆圈,如下所示:
// Create circles
node.append("circle")
.filter(function(d){return d.size > 0;})
.attr("r",function(d){return d.r;});
Run Code Online (Sandbox Code Playgroud)
不纠正布局问题.也许我过滤不正确?
您只是在应该设置新顺序和更新布局的代码部分中出现了一些错误。它应该看起来像这样:(它比当前代码中的内容更简单)
pack
.sort(sortItems)
.nodes({blocks:data});
node
.attr("transform",function(d){
return "translate("+d.x+","+d.y+")";
})
.selectAll("circle")
.attr("r",function(d){return d.r;});
Run Code Online (Sandbox Code Playgroud)
我在包初始化中用这一行解决了零值问题:
.value(function(d){return Math.max(0.01, d.size);});
Run Code Online (Sandbox Code Playgroud)
这是jsfiddle。
以下是执行视频:

(请注意,按第三次按钮后,圆圈不会返回原始顺序,但这是由于与原始问题没有直接联系的其他原因(这是关于圆圈包中的升序/降序))。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1946 次 |
| 最近记录: |