获取计算的直方图箱阈值

时间:2018-06-06 12:54:01

标签: javascript d3.js

我已正确应用d3(v 4.0)直方图函数来装箱数据数组。我的代码如下所示:

var bins = d3.histogram()
     .domain([data_points_min, data_points_max])
     .thresholds(8)
     (data_points);

是否有检索bin阈值的功能?我想我可以遍历数组并确定每个bin中的最大值,但这将是乏味的。我猜测必须有一个函数,包括一个产生“令人愉悦的人眼”的bin阈值而不是一些可怕的十进制数的函数。

伪代码会是这样的:

var bin_thresholds = bin.thresholds();

1 个答案:

答案 0 :(得分:3)

没有方法(据我所知)返回每个bin的下限和上限。有一种方法可以返回垃圾箱数量......

d3.thresholdSturges(values);

...这显然不是你想要的,特别是因为你已经设置了垃圾箱的数量。

但是,您不需要"循环播放数组并确定每个bin中的最大值" 。直方图生成器生成两个属性:

  
      
  • x0 - bin的下限(包括)。
  •   
  • x1 - bin的上限(不包括最后一个bin)。
  •   

因此,您可以遍历结果以仅获取这些属性。例如:



var data = d3.range(1000).map(() => Math.random() * 20);
var bins = d3.histogram()
  .thresholds(8)(data)

bins.forEach(function(d, i) {
  console.log("Array number " + i + " --> Lower limit: " + d.x0 + " Upper limit:" + d.x1)
})

<script src="https://d3js.org/d3.v5.min.js"></script>
&#13;
&#13;
&#13;

PS:您不需要设置domain,因为您只是传递数组的最小值和最大值,这是默认域名:

  

如果指定了domain,则将域访问器设置为指定的函数或数组,并返回此直方图生成器。如果未指定域,则返回当前域访问者,默认为范围。 (强调我的)