2014-04-23 88 views
0

我正在测试不同的JavaScript图形框架。我正在尝试使用生成的数据绘制线图和散点图。虽然一切都很顺利。尝试为散点图生成数据时遇到了麻烦。生成散点图的随机数据

因此,这将是很容易做这样的事情在PHP中,或以任何其他语言:

for ($i=0; $i < $x; $i++) { 
    $data[] = array(
     'x' => mt_rand(0, 10000), 
     'y' => mt_rand(0, 10000) 
    ); 
} 

结果是整个图表周围几乎均匀分布。所以我在这里试图想出一种方法来提供更好的随机数据,最终看起来更像散点图,而不是页面上的均匀分布的点。我无法想出任何东西。

我想的东西更像是从Web此随机散点图来结束:

Random scatter plot from the web

所以它在弯道中的情节和几乎没有的某些部分更加激烈。但我不想让一个点完全不可能到达角落。

任何算法思想?

+0

看看准随机数。这将平均覆盖整架飞机。 – arunmoezhi

+0

很抱歉,如果我不太清楚,但我想是。我目前拥有的分布非常平均。我想完全相反。因此,与1.000.000点,它不会完全覆盖,但在图上还存在一些空白区域。 –

+0

看起来像你需要'X'和'Y'是随机的,但是对于一个给定的样本'(X,Y)'你需要'X'和'Y'来互相靠近 – arunmoezhi

回答

2

对于类似于您显示的图像的情况,您在哪里有一条要分散数据的线,这很容易。例如,想象其中的一条线y = x * 0.75。鉴于此,您选择范围为0..xMax(无论您的最大X值是多少)的x值,然后生成具有一定差异的y的值。例如,如果90%的时间Y值在预期值的10%以内,那么您将生成一个介于0.675x和0.825x之间的随机值。假设有5%的时间,Y值在期望值的50%以内,并且该值不受限制的时间为5%。对于其中的每一个,您都会以同样的方式生成一个Y值:一个等于预期的Y值(加或减50%)的随机值(或者,在后一种情况下,加或减一些非常大的数)。

您可以适当调整概率和方差。

您还可以调整X值的分布。例如,它看起来像你的大部分数据点在大约.15 xMax和.6 xMax之间。所以你想要的是该范围内X值的更高百分比。想象,那么你的X值被分成三个不同的范围:

0 to .149 * xMax - 20% 
.15 to .60 * xMax - 70% 
> .60 xMax - 10% 

生成0和100之间的随机数然后:

if value < 20, generate an x value between 0 and .15 xmax 
if value > 19 & < 60, generate an x value between .15 xMax and .60 xMax 
otherwise, generate an x value > .60 xMax and < xMax 
+0

花了相当多的试验和错误得到一些很酷的数据。但你的解决方案为我打开了所有的门。所以现在我只需要玩这个百分比。 –

1
  1. 定义变为中心线的功能例如c(x)= sqrt(x)。

  2. 定义一个函数,指定与中心线的最大允许偏差,例如d(x)= 0.1(x-5)²。对于每个x值,生成一个或几个y值y(x)= c(x)+ 2 *(random() - 0.5)* d(x)其中random()是一个(伪)随机数字发生器的值在[0; 1]中。

  3. 对于更逼真的外观使用(伪),其具有一个更有趣的分布随机数发生器,例如一个正常的分布与标准偏差d(x)的。