2013-06-26 3 views
0

Итак, я думаю, что это скорее математический вопрос, чем PHP, но я не знаю, куда еще он пойдет. Таким образом, у меня есть сайт телешоу, который показывает распределение рейтингов от каждого пользователя. Два примера можно увидеть здесь http://broadcasted.tv/user/2/albertmarch/ и здесь http://broadcasted.tv/user/21/freshprincelive/. Вот формула я использую для расчета каждого из баров на данный момент:Bar Charts height in PHP

$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/

Любая рекомендация была бы действительно оценена. Благодарности

ответ

0

Highcharts Недавно я обнаружил http://www.highcharts.com/demo/

мне очень понравился, потому что он касается все эстетики

Это также обеспечит множество различных типов диаграмм для вас. http://www.highcharts.com/demo/column-basic

+0

Я проверил это, и это хорошо, настроив его, чтобы он выглядел так, как будто мои текущие диаграммы выглядят так, будто это будет огромная боль в заднице. Но их высота бара хороша, поэтому я попытаюсь выяснить, как они это получат. – Callombert

0

Во-первых, вы должны оптимизировать свой код, заменяющий

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

по переменной

$pixelsactual = $division * $pixels; 

$percentage действительно не нужны.

Проблема в том, что вы взламываете так, чтобы все полосы становились видимыми. Тогда ожидается, что некоторые диаграммы будут иметь несколько баров с разными значениями на одной высоте.

Я бы порекомендовал вам удалить этот хак (и взлом 130px, вы должны просто положить его в $ пикселей) и использовать функцию с уменьшающейся производной функцией (например, журнал или что-то в этом роде), так что небольшие значения быстро набирали бы высоту, когда более высокие значения повышали бы высоту более медленно.

0

Попробуйте это Сначала получите самые высокие данные из вашего массива данных.

$highest=max($array); 

Тогда получите 1% от этого.

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

теперь вы можете сделать это

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

в петле

echo $array[$a]*$x; 

и вы получите вашу переменную высоту диаграммы. Совет ... Вы можете умножить его * 4 на лучшую высоту px