download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Построяване на диаграми в реално време

Автор
Съобщение
anonymous
Пет, 17.08.07, 09:27
От известно време използвам един много добър пакет, служещ за изчертаване на диаграми в реално време. Пакетът се казва jpgraph. Съществува в две версии - за PHP 4 (v1.21b) и за PHP 5 (v2.2). Ще демонстрирам неговото използване с един елементарен пример:

<?php
include ("jpgraph.php");
include ("jpgraph_bar.php");

// Някакви данни
$datay1=array(194000,231000,248000,257000,285000,315000);
$datay2=array(66000,120000,145000,176000,183000,208000);
$datay3=array(35000,66000,82000,85000,89000,93000);
$datay4=array(802,806,840,914,987,1110);

// Създава базовата диаграма
$graph = new Graph(500,500,'auto');
$graph->SetScale("textlin");
$graph->img->SetMargin(60,40,40,40);
$graph->yscale->SetGrace(11);

// Нагажда позицията на легендата
$graph->legend->Pos(0.44,0.09);

//Нагажда цвета и сянката на кутията с легендата
$graph->legend->SetShadow('darkgray@0.5');
$graph->legend->SetFillColor('lightblue@0.3');
$graph->legend->SetFont(FF_ARIAL,FS_NORMAL,9);
$graph->legend->SetHColMargin(15);

// Инициализира годините
$years=array(2001,2002,2003,2004,2005,2006);
$graph->xaxis->SetTickLabels($years);

// Инициализира картинка за фон
//$graph->SetBackgroundImage('stship.jpg',BGIMG_COPY);

// Инициализира заглавията и шрифта за осите на диаграмата
$graph->xaxis->title->Set('Година');
$graph->xaxis->title->SetFont(FF_TIMES,FS_BOLD,10);
$graph->xaxis->title->SetColor('red');
$graph->xaxis->title->SetMargin(5);

$graph->xaxis->SetFont(FF_TIMES,FS_BOLD,10);
$graph->xaxis->SetColor('black');

$graph->yaxis->SetFont(FF_TIMES,FS_BOLD,10);
$graph->yaxis->SetColor('black');

//Инициализира мрежа
$graph->ygrid->SetColor('white@0.5');

// Инициализира заглавието на диаграмата
$graph->title->Set('Показатели за дейността');
// Инициализира margin (from the top)
$graph->title->SetMargin(5);
$graph->title->SetFont(FF_TIMES,FS_NORMAL,12);

// Създава сериите, които ще комбинираме за изчертаването
$bplot1 = new BarPlot($datay1);
$bplot2 = new BarPlot($datay2);
$bplot3 = new BarPlot($datay3);
$bplot4 = new BarPlot($datay4);

//Показва стойностите
$bplot1->value->SHow();
$bplot1->value->SetAngle(80);
$bplot1->value->SetFont(FF_ARIAL,FS_NORMAL,7);
$bplot1->value->SetFormat("%01d");
$bplot2->value->SHow();
$bplot2->value->SetAngle(80);
$bplot2->value->SetFont(FF_ARIAL,FS_NORMAL,7);
$bplot2->value->SetFormat("%01d");
$bplot3->value->SHow();
$bplot3->value->SetAngle(80);
$bplot3->value->SetFont(FF_ARIAL,FS_NORMAL,7);
$bplot3->value->SetFormat("%01d");
$bplot4->value->SHow();
$bplot4->value->SetAngle(80);
$bplot4->value->SetFont(FF_ARIAL,FS_NORMAL,7);
$bplot4->value->SetFormat("%01d");
$bplot4->value->SHow();

//Инициализира цветовете с 10% прозрачност (alpha channel)
$bplot1->SetFillColor('red@0.1');
$bplot2->SetFillColor('orange@0.1');
$bplot3->SetFillColor('yellow@0.1');
$bplot4->SetFillColor('white@0.1');

//Инициализира легендата
$bplot1->SetLegend('Брой клиенти');
$bplot2->SetLegend('Брой банкови карти');
$bplot3->SetLegend('Брой потребителски кредити');
$bplot4->SetLegend('Брой служители');

//Включва сянка за всяка колона с 40% прозрачност
$bplot1->SetShadow('black@0.4');
$bplot2->SetShadow('black@0.4');
$bplot3->SetShadow('black@0.4');
$bplot4->SetShadow('black@0.4');

$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3,$bplot4));
$gbarplot->SetWidth(0.8);
$graph->Add($gbarplot);

$graph->Stroke();
?>
Ами това е. Дано ви влезе в работа. Пакетът включва много възможности за изчертаване на различни по тип диаграми. Данните за диаграмите обикновено не помествам в масиви, а тегля от базата данни. Затова ползвам изчертаване в реално време.

insecteater
Пет, 17.08.07, 10:16
Ще влезе в работа. Удобно е. Ами се чудя има ли някъде превод на езиковия файл на български и дали си заслужава да се превежда.

Графиката от примера
Графиката от примера

За сравнение това долното е от графика от сървъра, ми, но там съм писал доста повече код и то само и единствено за този вид графика и с такова оформление:

Трафик
Трафик

Страхотна идея, благодаря за улеснението

anonymous
Пет, 17.08.07, 10:20
Право да си кажа, не съм се интересувал. Аз работя с eclipse и когато заредя там класовете, виждам всяка една функция. А те са много добре пояснени в самия сорс. Удобно е, наистина. Благодаря!

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.