我已正确应用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();
答案 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;
PS:您不需要设置domain
,因为您只是传递数组的最小值和最大值,这是默认域名:
如果指定了domain,则将域访问器设置为指定的函数或数组,并返回此直方图生成器。如果未指定域,则返回当前域访问者,默认为范围。 (强调我的)