2010-09-22 99 views
2

给定一个数据范围的最小值和最大值,如何计算一个轴上桶的分布?
要求如下:
- 轴刻度应均匀分布(大小相等)。
- 此外,所有刻度应显示为数字,如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桶桶大小?

回答

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)不返回一个纯整数