我想为我的可视化项目(在JavaScript中)创建一些“模拟数据”。
优选地,我想根据一些概率分布函数(即正态或对数正态),将分配给具有z步长区间的y不同群。
示例:
使用正常密度函数,精确分配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(如果我能用一个简单的种子参数引入一些偏斜,那将是一个额外的好处。)
发布于 2012-03-14 05:48:25
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
发布于 2012-02-27 20:50:01
您正在寻找的算法是kd树或树地图。一个kd-树降低了维度的复杂性。有一个免费的jquery可以下载。
https://stackoverflow.com/questions/9471939
复制相似问题