Создание диаграммы на основе переданых данных


Прислал: Тарасенко Сергей [ 14.05.2001 @ 05:55 ]
Раздел:: [ Статьи по PHP ]


Рассмотрим пример скрипта с описанием,который позволяет динамически создавать диаграмму на основе переданых данных имеющую вид:

Такой скрипт,например будет очень удобен при создании статистики у вас на сайте (хотя его приаменения могут быть более разнообразными). Вы должны передать в этот скрипт 3 параметра : title,width и data.
- title - название диаграммы (в примере "foo")
- width - длина картинки в пикселях.
- data - переменные и значения по которым строится диаграмма
Удобство скрипта в том,что количество передаваемых переменных не ограничено

Внимание! GD должна быть включена

<?
//Название
$title = urldecode($title);
//Данные
$data = urldecode($data);
//Начальная точка построения диаграммы
$x = 40;
$y = 30;
$right_margin= 20;
$bar_width = 10;
$total = 0;
$max = 0;
$unit = (($width-$x)-$right_margin) / 100;
$items= explode("^^",$data);
//Сумма
while (list($key,$item) = each($items))
{
if ($item)
{
$pos = strpos($item,"^");
$value = substr($item,$pos+1,strlen($item));
$total = $total + $value;
}
}

reset($items);
//Подсчет высоты диаграммы
$height = sizeof($items) * ($bar_width + 20);
Header("Content-type:  image/gif");
$im = imagecreate($width,$height);
// Задание цвета
$white=ImageColorAllocate($im,255,255,255);
$yellow=ImageColorAllocate($im,240,240,70);
$blue=ImageColorAllocate($im,0,64,128);
$bar=ImageColorAllocate($im,64,100,168);
//Задание фона
ImageFilledRectangle($im,0,0,$width,$height,$blue);
//Рисуем заголовок
$title_x = (imagesx($im)-7.5*strlen($title))/2;
ImageString($im,3,$title_x,4,$title,$white);
//Рисуем дату
ImageString($im,1,$width-150,17,date("D M jS Y h:i:s A"),$white);
//Линия
Imageline($im,$x,$y-5,$x,$height-15,$bar);
//Прорисовываем данные
while (list($key,$item) = each($items))
{
if ($item)
{
$pos = strpos($item,"^");
$item_title = substr($item,0,$pos);
$value = substr($item,$pos+1,strlen($item));
//Выводим в процентах
ImageString($im,3,$x-25,$y-2,intval(round(($value/$total)*100))."%",$yellow);
$px = $x + ( intval(round(($value/$total)*100)) * $unit);
ImageFilledRectangle($im,$x,$y-2,$px,$y+$bar_width,$bar);
ImageString($im,2,$x+5,$y+9,$item_title,$white);
ImageRectangle($im,$px+1,$y-2,($x+(100*$unit)),$y+$bar_width,$bar);
//Выводим отношения
ImageString($im,1,($x+(100*$unit))-40,$y+12,$value."/".$total,$white);
}
$y=$y+($bar_width+20);
}
// Показываем созданую диаграму
ImageGif($im);
// Очищаем память:
ImageDestroy($im);
?>

Вы также можете вызавать картинки в самом html документе,при помощи:
<img src="graph.php?title=foo&width=500&data=a^15^^b^20^^">     

Ну вот и все.

Удачи в ваших программыных изысканиях!
Автор статьи: Тарасенко Сергей
Информационный клуб Webмастеров "Kwazar"ї
wc@newmail.ru