给定数据范围的最小值和最大值,如何计算轴上的桶的分布?
要求是:
- 轴刻度应均匀分布(大小相等)
- 此外,所有刻度应显示为10, 20, 30, ...
或-0.3, 0.1, 0.2, 0.4, ...
之类的数字
- 计算应接受一个参数,该参数定义所需的桶数。
以下示例计算最多10个桶或更少。
num buckets = 10
range length = 500
500 / 10 = 50
log_10(50) = 1,69
round up(1,69) = 2
10^2 = 100 bucket size
500 / 100 = 5 buckets
结果:有5个桶,每个桶的大小为100
这些步骤仅生成基于10^x
0.01, 0.1, 1, 10, 100, 1000 ...
如何计算恰好42个桶的桶大小?
答案 0 :(得分:1)
我不确定,但我认为此代码可以为您提供帮助(改编自JavaScript YUI YAHOO.util.DragDrop.js)
var initPosition = 0;
var rangeLength = 500;
var maxPosition = (initPosition + rangeLength);
getTicks: function(bucketSize) {
var axisTicks = [];
var tickMap = {};
for (i = initPosition; i <= maxPosition; i = i + bucketSize) {
if (!tickMap[i]) {
axisTicks[axisTicks.length] = i;
tickMap[i] = true;
}
}
return axisTicks;
}
缺点是因为,有时,轴刻度不会均匀分布((initPosition + rangeLength)/ bucketSize)不返回普通整数