2012-02-27 3 views
0

Я хочу создать некоторые «макетные данные» для моего проекта визуализации (в JavaScript).Данные поддельного распределения для визуализации

Предпочтительно, я хотел бы выделить в общей сложности х единиц к у различных групп с г интервала шага в соответствии с некоторой функцией распределения вероятностей , т.е. нормальной или логарифмически нормальной.

Пример:

Выделяют ровно 100 единиц к группам 0-5000, 5000-10000, [...], 75000-80000, используя нормальную функцию плотности.

Если вынести что-то вроде этого: (. Если бы я мог ввести некоторую асимметрию с простым параметром семян, который был бы бонус)

binNames = [ "0-5000", "5000-10000", [...] ] 
binData = [ 0,0,0,1,2,10,12,14,12,10 [...] ] //SUM = 100 

ответ

7

D3.js library имеет полезный инструмент для этого, d3.random.normal (reference, code). Даже если вы не используете D3, вы можете скопировать функцию в свой собственный код. Он возвращает функцию генератора, которая будет генерировать случайное число с нормальным распределением на основе среднего и стандартного отклонения, которое вы предоставляете.

Используя эту функцию, вы могли бы сделать некоторые случайные данные в формате, который вы хотите, как это:

// data generator 
var bins = 16, 
    target = 100, 
    step = 5000, 
    max = bins * step, 
    stddev = max * .15, 
    data = [], 
    generator = d3.random.normal(max/2, stddev), 
    x=0, y=0; 

// set up bins 
while (x++ < bins) data.push(0); 
// add numbers 
while (y++ < target) { 
    // get a new number 
    var number = generator(); 
    // don't allow numbers outside the desired range 
    number = ~~Math.max(0, Math.min(number, max)); 
    // increment the bin 
    bin = ~~(number/max * bins); 
    data[bin]++; 
} 

Я сделал небольшую анимированную гистограмму в качестве примера: http://bl.ocks.org/2034281

0

алгоритма вы ищете kd-tree или treemap. Kd-дерево уменьшает сложность размеров. Существует бесплатный загрузочный файл для jquery.

Смежные вопросы