2010-09-22 5 views
2

Étant donné une plage de données par sa valeur minimale et sa valeur maximale, comment peut-on calculer la distribution des segments sur un axe?
Les exigences sont les suivantes:
- Les graduations de l'axe doivent être réparties uniformément (taille égale).
- En outre, toutes les graduations doivent apparaître sous la forme de nombres comme 10, 20, 30, ... ou -0.3, 0.1, 0.2, 0.4, ...
- Le calcul doit accepter un paramètre qui définit le nombre de compartiments souhaités.Comment calculer les ticks d'axe à une distribution uniforme?

L'exemple suivant calcule un maximum de 10 compartiments ou moins.

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 

Résultat: Il y a 5 seaux chacun à une taille de 100.
Les étapes ne produisent que des seaux qui sont basés sur 10^x qui sont 0.01, 0.1, 1, 10, 100, 1000 ...

Comment peut-on calculer la taille des seaux pour exactement 42 seaux ?

Répondre

1

Je ne suis pas sûr, mais je pense que ce code peut vous aider (Adaptée à partir de 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; 
} 

L'inconvénient est que, parfois, l'axe tiques ne seront pas uniformément répartie ((initPosition + rangeLength)/bucketSize) ne renvoie pas un entier simple

Questions connexes