我正在尝试为一个可以包含0个值的数组显示D3气泡图。如果0的数量达到高,则气泡开始“消失”。看到这个例子(它应该显示10个气泡): Example on jsfiddle
我做错了吗?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta name="language" content="de">
<title>Disappearing bubble Problem</title>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript" src="http://d3js.org/d3.v2.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script type='text/javascript'>
$(document).ready(function(){
var r = 700
var bubble_layout = d3.layout.pack()
.size([r,r])
.padding(1.5);
var vis = d3.select("#chart").append("svg")
.attr("width" , r)
.attr("height", r)
var arr = [
{ name : '1', value: 1 }
,{ name : '2', value: 1 }
,{ name : '3', value: 1 }
,{ name : '4', value: 1 }
,{ name : '5', value: 1 }
,{ name : '6', value: 1 }
,{ name : '7', value: 1 }
,{ name : '8', value: 1 }
,{ name : '9', value: 1 }
,{ name : '10', value: 1 }
,{ name : '11', value: 0 } //Adding data elements with value 0 makes bubbles disappear
,{ name : '12', value: 0 }
,{ name : '13', value: 0 }
,{ name : '14', value: 0 }
,{ name : '15', value: 0 }
,{ name : '16', value: 0 }
,{ name : '17', value: 0 }
,{ name : '18', value: 0 }
,{ name : '19', value: 0 }
,{ name : '20', value: 0 }
,{ name : '21', value: 0 }
,{ name : '22', value: 0 }
,{ name : '23', value: 0 }
,{ name : '24', value: 0 }
,{ name : '25', value: 0 }
,{ name : '26', value: 0 }
,{ name : '27', value: 0 }
,{ name : '28', value: 0 }
,{ name : '29', value: 0 }
,{ name : '30', value: 0 }
,{ name : '31', value: 0 }
,{ name : '32', value: 0 }
,{ name : '33', value: 0 }
,{ name : '34', value: 0 }
,{ name : '35', value: 0 }
,{ name : '36', value: 0 }
];
var selection = vis.selectAll("g.node")
.data(bubble_layout.nodes({children: arr}).filter(function(d) { return !d.children; }) );
//Enter
node = selection.enter().append("g")
.attr("class", "node")
.attr("transform", function(d) { return "translate(" + d.x + ", " + d.y + ")"; });
node.append("circle")
.attr("r", function(d) { return d.r; })
.style("fill", function(d) { return 'aaaaaa'; });
node.append("text")
.attr("text-anchor", "middle")
.attr("dy", ".3em")
.text(function(d) { return d.name; });
} );
</script>
</head>
<body>
<span id='chart'>
</body>
</html>
答案 0 :(得分:0)
你的圈子不会消失,它们会被渲染但被其他人覆盖。
您可以将包布局的排序顺序更改为升序以外的其他顺序 - 这是默认值。它可以设置为null
var bubble_layout = d3.layout.pack()
.sort(null) // <-- HERE
.size([r,r])
.padding(1.5);
此外,您可能希望过滤所选内容以仅包含值大于0的项目,以避免创建半径为零的圆圈。
var node = selection.enter().append("g")
.attr("class", "node")
.attr("transform", function(d) {
return "translate(" + d.x + ", " + d.y + ")";
})
.filter(function(d){
return d.value > 0; // <-- HERE
})
更新了JSFiddle:http://jsfiddle.net/jaimem/WWxqh/4/
为了防止统一外观,您需要更改value
属性,因为d3.js使用它来实现其魔力。检查这个小提琴:http://jsfiddle.net/jaimem/WWxqh/5/