Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: gd2 график - расположить по всей высоте
 
 автор: qwofer   (27.03.2012 в 19:29)   письмо автору
 
 

Доброго времени суток, форумчане!

Разрабатываю для компании внутренний сайт учета и статистики оплаты по жкх жителями домов, которыми мы управляем.

В виде статистики помимо всего прочего данные отображаются у меня в виде графиков.
Вот пример одного из них:
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($img00$X$Y_($img"ffffff"));
    for (
$i 10$i $X$i+=10imageline($img$i0$i$Y_($img"f7f7f7")); // рисуем клетки
    
for ($i 10$i $Y$i+=10imageline($img0$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 >= 0imageline($img$lx+4   $ly-2$x$y-2_($img"cccccc")); // соеденим последние вершины
        
imagettftext($img8020$y 6_($img"000000"), '../resource/font/arial.ttf'$coor[$i]); // напишем сумму долга слева
        
imagefilledellipse($img$x$y66_($img"ffffff")); // нарисуем не закрашенный круг
        
imageellipse($img$x$y66_($img"000000"));  // --//--
        
$lx $x// для следующего прохода
        
$ly $y// --//--
    
}
    
imagepng($img);
    
imagedestroy($img);
}
?>

  Ответить  
 
 автор: Valick   (27.03.2012 в 19:38)   письмо автору
 
   для: qwofer   (27.03.2012 в 19:29)
 

чтобы минимум был в самом низу графика, а максимум, соответственно, в самом верху
ну у вас же есть минимум, вот и вычитайте его от всех значений при построении графика
и будет вам ноль и выше
промаксимум немного непонятно, вам нужна изменяющаяся шкала деления?

  Ответить  
 
 автор: qwofer   (27.03.2012 в 19:48)   письмо автору
 
   для: Valick   (27.03.2012 в 19:38)
 

Не понял что Вы имеете в виду под изменяющейся шкалой деления, но я уже успел исправить все сам, пока дожидался ответа :)
Видать, к концу рабочего дня мои мозги явно съезжают в сторону))

Спасибо, что Вам не составило труда ответить на глупый вопрос.

  Ответить  
 
 автор: Valick   (27.03.2012 в 20:09)   письмо автору
 
   для: qwofer   (27.03.2012 в 19:48)
 

ну минимум у вас уже есть, а максимум может быть и 1000 и 5000, а на экране это надо уместить в 30 пикселов (и чтобы максимум и был на самом верху графика, как я понял) изображения, вот и получиться, что шкала будет для каждого максимума разная

  Ответить  
 
 автор: qwofer   (27.03.2012 в 20:14)   письмо автору
 
   для: Valick   (27.03.2012 в 20:09)
 

Да. Это я уже сделал :) Еще раз спасибо.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования