2012-02-27 26 views
0

我想为我的可视化项目(使用JavaScript)创建一些“模拟数据”。用于可视化的假分布数据

优选地,我想根据一些概率分布函数,即正常或对数正态到总共X单元分配ý不同组Z步长间隔

实施例:

究竟分配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.normalreferencecode)。即使您不使用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-tree降低了空间复杂性。有一个免费的jquery treemap可供下载。