使用PHP

时间:2015-04-24 07:39:56

标签: php jquery highcharts gaussian normal-distribution

我正在试图获得一个随机数组,其中数字放在高图表上,形式为" Bell Curve"。听起来很简单,但我无法确定在y轴上使用什么,因为类别应该是值,或者至少我认为是这样。

我的"高斯"函数,我知道它可能不正确,但它给了我一个数组,我试图放在一个高图样条图表。

    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轴上......我的老板说它应该没有任何价值,而且只是&#34;可能性&#34;,但是highcharts需要价值。

我一直在考虑根据它们在数组中的位置给每个数字一个0-100的数字(平均值= 100,平均值+ 1 = 80,平均值 - 1 = 80,依此类推)...但是我我很确定这是一种愚蠢的方式。

我也创建了一个Bell Curve函数,如果可能,可以与之前返回的数组一起使用,创建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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果其他人需要高斯函数与Highcharts一起使用,那么这就是我提出的。它对我有用,也许它也可以帮助别人。这将返回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;
}