|
|
|
| Доброго времени суток, форумчане!
Разрабатываю для компании внутренний сайт учета и статистики оплаты по жкх жителями домов, которыми мы управляем.
В виде статистики помимо всего прочего данные отображаются у меня в виде графиков.
Вот пример одного из них:
http://s58.radikal.ru/i162/1203/06/e9944f1ab766.png
Вроде все отображается хорошо, но как быть если долг практически не меняется? Например, так:
http://s019.radikal.ru/i613/1203/6a/896e2600b9ad.png
Посему моя задача такова:
Как расположить точки значений по всей высоте (чтобы минимум был в самом низу графика, а максимум, соответственно, в самом верху)?
Привожу код функции, отвечающей за рисование ($coor - одномерный массив значений)
<?php
function createv2($coor, $X, $Y) {
$img = imagecreatetruecolor($X, $Y);
imagefilledrectangle($img, 0, 0, $X, $Y, _($img, "ffffff"));
for ($i = 10; $i < $X; $i+=10) imageline($img, $i, 0, $i, $Y, _($img, "f7f7f7")); // рисуем клетки
for ($i = 10; $i < $Y; $i+=10) imageline($img, 0, $i, $X, $i, _($img, "f7f7f7")); // --//--
$max = max($coor);
$min = min($coor);
$wx = $X - 100 - 20;
$offset = $wx / sizeof($coor); // смещение следующей точки вправо на px
$max_persent = ($Y-16) / $max; // узнаем сколько рублей приходится на процент высоты
$ly = -100; // укажем, что при первом проходе линию рисовать не надо
for($i = 0; $i < sizeof($coor); $i++) {
$x += $offset;
$y = $Y - ($coor[$i] * $max_persent) - 8; // поменяем верх на низ для "человеческого" восприятия
if($ly >= 0) imageline($img, $lx+4 , $ly-2, $x, $y-2, _($img, "cccccc")); // соеденим последние вершины
imagettftext($img, 8, 0, 20, $y + 6, _($img, "000000"), '../resource/font/arial.ttf', $coor[$i]); // напишем сумму долга слева
imagefilledellipse($img, $x, $y, 6, 6, _($img, "ffffff")); // нарисуем не закрашенный круг
imageellipse($img, $x, $y, 6, 6, _($img, "000000")); // --//--
$lx = $x; // для следующего прохода
$ly = $y; // --//--
}
imagepng($img);
imagedestroy($img);
}
?>
|
| |
|
|
|
|
|
|
|
для: qwofer
(27.03.2012 в 19:29)
| | чтобы минимум был в самом низу графика, а максимум, соответственно, в самом верху
ну у вас же есть минимум, вот и вычитайте его от всех значений при построении графика
и будет вам ноль и выше
промаксимум немного непонятно, вам нужна изменяющаяся шкала деления? | |
|
|
|
|
|
|
|
для: Valick
(27.03.2012 в 19:38)
| | Не понял что Вы имеете в виду под изменяющейся шкалой деления, но я уже успел исправить все сам, пока дожидался ответа :)
Видать, к концу рабочего дня мои мозги явно съезжают в сторону))
Спасибо, что Вам не составило труда ответить на глупый вопрос. | |
|
|
|
|
|
|
|
для: qwofer
(27.03.2012 в 19:48)
| | ну минимум у вас уже есть, а максимум может быть и 1000 и 5000, а на экране это надо уместить в 30 пикселов (и чтобы максимум и был на самом верху графика, как я понял) изображения, вот и получиться, что шкала будет для каждого максимума разная | |
|
|
|
|
|
|
|
для: Valick
(27.03.2012 в 20:09)
| | Да. Это я уже сделал :) Еще раз спасибо. | |
|
|
|
|