0

所以我想这比 PHP 更像是一个数学问题,但我不知道它还能去哪里。所以我有一个电视节目网站,显示每个用户的收视率分布。在这里可以看到两个例子http://broadcasted.tv/user/2/albertmarch/和这里http://broadcasted.tv/user/21/freshprincelive/。这是我目前用来计算每个条形的公式:

$division = $scores[$i][1]  / $countvotestotal; 
//we divide the number of scores for each score (1 to 10) by the total number of score
$percentage = $division * 100;
$pixels = 180;
//max number of pixels
$pixelsactual = ($percentage / 100) * $pixels;
$addthat = $percentage * 3.4;
//add some pixels to give more relief to the charts (otherwise, with many ratings, you end having bars between 10px and 20px)
$finalpixels = $pixelsactual + $addthat;
if ($finalpixels > 130) {
    $finalpixels = 130;
}
//and this is a fix that I use, basically, if there is only one rating the biggest bar is gonna be huge (especially because of the $addthat var which add some px with a ratio to the final pixels value)

问题是有些图表看起来很糟糕(就像第一个配置文件一样)或者不同的值具有相同的条形大小,就像那里http://broadcasted.tv/user/98/armchairtv/

任何建议将不胜感激。谢谢

4

3 回答 3

0

我最近发现的 Highcharts http://www.highcharts.com/demo/

我真的很喜欢它,因为它处理了所有的美学

它还将为您提供许多不同的图表类型。http://www.highcharts.com/demo/column-basic

于 2013-06-26T14:15:46.883 回答
0

首先,你应该优化你的代码替换

$pixelsactual = ($percentage / 100) * $pixels;

经过

$pixelsactual = $division * $pixels;

$percentage这里真的不需要变量。

问题是您正在破解,以便所有条形都可见。然后可以预期,某些图表将在同一高度具有多个具有不同值的条形图。

我建议你删除那个 hack(和 130px hack,你应该把它放在 $pixels 中),并使用一个具有递减派生函数的函数(如 log 或类似的东西),这样小的值会迅速增加高度,当更高的值会更慢地增加高度时。

于 2013-06-26T14:25:35.243 回答
0

试试这个首先从你的数据数组中获取最高的数据。

$highest=max($array);

然后得到它的1%。

$x=$highest*0.01; // 1%

现在你可以做到这一点

//$highest*$x=100% or 100px

在一个循环中

echo $array[$a]*$x;

你得到你的可变图表高度。提示...您可以将它乘以 *4 以获得更好的 px 高度

于 2016-11-24T21:33:31.040 回答