javascript - D3.js 气泡图中消失的气泡

标签 javascript svg d3.js circle-pack

我正在尝试显示一个可以包含一些 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>

最佳答案

您的圆圈不会消失,它们会被渲染,但会被其他圆圈覆盖。

您可以将包布局的排序顺序更改为除升序之外的其他排序顺序 - 这是默认值。可以设置为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 使用它来发挥其魔力。检查这个 fiddle :http://jsfiddle.net/jaimem/WWxqh/5/

关于javascript - D3.js 气泡图中消失的气泡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13514461/

相关文章:

javascript - Lo-Dash - 帮助我理解为什么 _.pick 不能按我期望的方式工作

javascript - 将innerHTML从一个元素复制到另一个

javascript - 从 jquery 创建链接

html - 为什么此代码未在 svg 矩形上显示背景图像

javascript - 如何向 d3.xhr 调用添加全局监听器

javascript - 无法让移动导航重新出现

react-native - 将 svg 与 webpack 和故事书一起使用时出错

xml - 为什么命名空间参数?

d3.js - 可能的 d3 错误 : dragend fires without any drag event

d3.js - 折线图的引用线