Highcharts 高斯图/高斯分布,PHP

Highcharts Gaussian Chart / Gaussian Distribution, with PHP

我正在尝试获取一个随机数组,其中数字以 "Bell Curve" 的形式放置在 highcharts 图表上。听起来很简单,但我很难弄清楚在 y 轴上使用什么,因为类别应该是值,或者至少我是这么认为的。

我的 "gaussian" 函数,我知道它可能不正确,但它给了我一个数组,我正试图将其放置在 highcharts 样条图中。

    for ($i = 0; $i < 100; $i++) {
        $array[] = rand(1, 1000);
    }

    $std = 10;
    function likelyHood($array, $std) {

        $mean = (int) round((min($array) + max($array)) / 2); 
        $standard = (max($array) - min($array)) / $std;

        for($i = 1; $i < $std/1.99; $i++) {
            $before[] = (int) round($mean - ($standard*$i));       
            $after[] = (int) round($mean + ($standard*$i));       
        } 
        $before = array_reverse($before, true);
        $result = array_merge((array)($before), (array)$mean, (array)$after);
        return $result;
    }

这给了我这样的东西:

Array
(
    [0] => 1
    [1] => 100
    [2] => 199
    [3] => 298
    [4] => 397
    [5] => 496
    [6] => 595
    [7] => 694
    [8] => 793
    [9] => 892
    [10] => 991
)

我将其用作图表中的 X 轴。现在,这是我有点卡住的地方,我可以在我的 Y 轴上放什么......我的老板说它应该没有价值,只是 "Likelyhood",但是 highcharts 想要价值。

我一直在考虑根据每个数字在数组中的位置给每个数字一个 0-100 的数字,(平均值 = 100,平均值 + 1 = 80,平均值 - 1 = 80,等等)...但我很确定这是一种愚蠢的做法。

我还创建了一个钟形曲线函数,如果可能的话,它可以与之前返回的数组一起使用,以创建 Y 轴,该函数首先获取最高的数字,然后开始推入和取消移动数组中的数字,直到为空。也许我可以用百分比更改数字,并拥有一个非常动态的系统...但是...

那个函数在这里:

function bellCurve($array) {

    $count = count($array);

    arsort($array);

    $max = array_slice($array, 0, 1);
    $bell = $max;
    array_shift($array);

    for ($i = 0; $i < $count; $i++) {
        $top = array_reverse(array_slice($array, 0, 2));
        array_shift($array); // istedet for array_diff($top)
        array_shift($array); // istedet for array_diff($top)
        if ($top[0] < max($bell) && $top[0] > $top[1]) {
            array_push($bell, $top[1]);
            array_unshift($bell, $top[0]);
        } else {
            array_push($bell, $top[0]);
            array_unshift($bell, $top[1]);
        }
    }
    $bell = array_filter($bell);
    return array_values($bell);
}

老实说...我觉得这很难,而且我知道这听起来可能令人困惑,但我已经尝试了很多。我在将数据放入图表方面没有任何问题,我在理解 y 轴上究竟应该是什么方面有问题,如果我对 x 轴有误......那也是。

我希望它看起来像的一个例子: http://imgur.com/uHjsOWU

如有任何帮助,我们将不胜感激。

如果其他人需要高斯函数来与 Highcharts 一起使用,那么这就是我想出的。它对我有用,也许它也会帮助其他人。这 returns X 轴和 Y 轴。

更改刻度数量的 Xres。

function gaussianGraph($array) {

    $Xres = 100;

    $min = $array[0];
    $ave = $array[1];
    $max = $array[2];

    $mean = (int) round(($min + 4 * $ave + $max) / 6);  // E = (a + 4m + b) / 6
    $std = (int) round(($max - $min) / 6); // SD = (b − a) / 6

    $Xmin = $mean - 2 * $std;
    $Xmax = $mean + 2 * $std;
    $Xrel = ($Xmax - $Xmin) / $Xres;

    for ($i = 0; $i < $Xres + 1; $i++) {
        $Xindex = (int) round($Xmin + $i * $Xrel);
        $Xgaussian[] = $Xindex;
        $Ygaussian[] = (1 / ($std * sqrt(2 * pi()))) * (exp(-(pow($Xindex - $mean, 2) / (2 * pow($std, 2)))));
    }
    $result = array_combine($Xgaussian, $Ygaussian);

    return $result;
}