Php 循环中的数据分布

Php 循环中的数据分布,php,web-applications,jquery-plugins,Php,Web Applications,Jquery Plugins,假设我有一些元素(E1,E2,…,En),它们的值在[1;100]中变化。我有一个圆圈(见下图),每个圆圈代表数据的范围 问题是如何显示E的这些元素在这个圆中的分布。下图描述了圆圈中E的一些元素的分布,例如E1=10,E2=35,…,E6=100,E7=91。PHP中是否有现成的库,jQuery中是否有现成的插件,或者是否有现成的解决方案? 我需要使用HTML+CSS+jQuery在我的web应用程序中实现这个问题(请不要使用flash技术提供解决方案)。 注意:这就像在MS Excel中创建图

假设我有一些元素(
E1,E2,…,En
),它们的值在
[1;100]
中变化。我有一个圆圈(见下图),每个圆圈代表数据的范围
问题是如何显示
E
的这些元素在这个圆中的分布。下图描述了圆圈中
E
的一些元素的分布,例如
E1=10,E2=35,…,E6=100,E7=91
。PHP中是否有现成的库,jQuery中是否有现成的插件,或者是否有现成的解决方案?
我需要使用HTML+CSS+jQuery在我的web应用程序中实现这个问题(请不要使用flash技术提供解决方案)。
注意:这就像在MS Excel中创建图表一样。例如,在MS Excel中,有一种称为雷达的图表类型或多或少地实现了这个问题,但在我的例子中,我使用的是圆而不是多边形,并且只有有限的
[1;100]
范围


编辑
我忘了提到,在这个图中,位于中心的对象元素是我们显示分布所基于的对象。如果元素与对象匹配的百分比更大,则使其接近对象,反之亦然。

我不知道有任何预先制作的那样的图表。但是,您可以使用带有自定义背景的散点图进行复制。有一些jquery。您必须进行数学运算,以创建与中心点有适当距离的x,y坐标,但图表插件应负责其余部分。

我不知道有任何类似的预制作图形。但是,您可以使用带有自定义背景的散点图进行复制。有一些jquery。您必须进行数学运算,以创建距离中心点适当距离的x、y坐标,但图表插件应负责其余部分。

这是不完整的,请参阅手册中有关如何添加文本等内容

<?php
$size = 501; //odd

$img = imagecreatetruecolor($size, $size);

$center = array((int) ($size/2), (int) ($size/2));
$colors['white'] = imagecolorallocate($img, 255, 255, 255);
$colors['black'] = imagecolorallocate($img, 0, 0, 0);
$colors['blue'] = imagecolorallocate($img, 0, 0, 255);

imagefill($img, 0, 0, $colors['white']);

$valid_rad = array((int) (($center[0] - 1) * .2), (int) (($center[0] - 1) * .9));

function radius_for($percentage, $valid_rad) {
    return $valid_rad[1] - ($valid_rad[1] - $valid_rad[0]) *
        ($percentage/100);
}

foreach (array(0,25,50,75,100) as $perc) {
    $radius = radius_for($perc, $valid_rad);
    imagearc($img, $center[0], $center[1], $radius*2, $radius*2,
        0, 360, $colors['black']);
}


foreach (array(100,85,70,36,23,2) as $perc) {
    $radius = radius_for($perc, $valid_rad);
    $angle = pi() * 1.25 + ((rand(0,100) - 50) / 50) * .5;
    $x = (int) ($radius * cos($angle)) + $center[0];
    $y = (int) ($radius * sin($angle)) + $center[1];

    imagefilledellipse($img, $x, $y , 20, 20, $colors['blue']);
}


header("Content-type: image/png");
imagepng($img);

这是不完整的,请参阅有关如何添加文本等的手册

<?php
$size = 501; //odd

$img = imagecreatetruecolor($size, $size);

$center = array((int) ($size/2), (int) ($size/2));
$colors['white'] = imagecolorallocate($img, 255, 255, 255);
$colors['black'] = imagecolorallocate($img, 0, 0, 0);
$colors['blue'] = imagecolorallocate($img, 0, 0, 255);

imagefill($img, 0, 0, $colors['white']);

$valid_rad = array((int) (($center[0] - 1) * .2), (int) (($center[0] - 1) * .9));

function radius_for($percentage, $valid_rad) {
    return $valid_rad[1] - ($valid_rad[1] - $valid_rad[0]) *
        ($percentage/100);
}

foreach (array(0,25,50,75,100) as $perc) {
    $radius = radius_for($perc, $valid_rad);
    imagearc($img, $center[0], $center[1], $radius*2, $radius*2,
        0, 360, $colors['black']);
}


foreach (array(100,85,70,36,23,2) as $perc) {
    $radius = radius_for($perc, $valid_rad);
    $angle = pi() * 1.25 + ((rand(0,100) - 50) / 50) * .5;
    $x = (int) ($radius * cos($angle)) + $center[0];
    $y = (int) ($radius * sin($angle)) + $center[1];

    imagefilledellipse($img, $x, $y , 20, 20, $colors['blue']);
}


header("Content-type: image/png");
imagepng($img);

为什么要标记这个PHP?从您的描述来看,服务器端解决方案似乎是不可接受的。我假设是PHP,因为我可能会使用一些现成的库在PHP中创建此图,并向客户端发送一个图像。为什么要标记此PHP?从您的描述来看,服务器端解决方案似乎是不可接受的。我假设是PHP,因为我可能会用PHP创建此图,并使用一些现成的库向客户端发送一个图像。非常感谢。这是非常快的回答。现在我将尝试使用HTML5+CSS+jQuery中的画布来实现这一点。我觉得没那么难。我将遵循您的算法。它唯一的问题是元素重叠,当兰德(0100)生成类似的数字时。@Bakhtiyor,您可以生成不同的随机数(如果您以前看到一个数字,则重新生成),将
((兰德(0100)-50)/50)*.5
更改为
((兰德(0,20)-10)/10)*.5
这样数字就不那么相似了,或者增加了乘法因子
.5
这样圆圈就更分散了。但是无论如何,我非常感谢你的帮助。非常感谢,非常感谢。这是非常快的回答。现在我将尝试使用HTML5+CSS+jQuery中的画布来实现这一点。我觉得没那么难。我将遵循您的算法。它唯一的问题是元素重叠,当兰德(0100)生成类似的数字时。@Bakhtiyor,您可以生成不同的随机数(如果您以前看到一个数字,则重新生成),将
((兰德(0100)-50)/50)*.5
更改为
((兰德(0,20)-10)/10)*.5
这样数字就不那么相似了,或者增加了乘法因子
.5
这样圆圈就更分散了。但是无论如何,我非常感谢你的帮助。谢谢。