Графики и диаграммы средствами PHP + GD

12 Октября, 2005

Часто перед web-разработчиком стоит задача генерирования графиков и диаграмм на основе некоторых данных. Если диаграммы еще можно построить средствами HTML + CSS, то графики так вывести уже не удастся. Более предпочтительный вариант – генерирование рисунков с помощью PHP + GD. Но и этот вариант достаточно трудоемок.

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

Моим требований полностью соответствовал лишь ASE ChartDirector, но, к сожалению, этот продукт распространяется на платных условиях, поэтому сферы его применения весьма ограничены ;)

Но буквально пару дней назад я нашел достойную бесплатную альтернативу продукту от компании ASE. Имя ей – JpGraph. Библиотека полностью объектно-ориентированная, содержит в себе 101 класс и 948 методов, которые позволяют создавать практически любые диаграммы и графики. Вместе с библиотекой поставляется подробнейший мануал, описание всех классов и методов, а также пара сотен примеров.

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

Диаграмма, построенная с помощью JpGraph

Ниже преведен код, который генерирует эту прелесть :]

<?php
// подключим библиотеки
include ("../jpgraph.php");
include ("../jpgraph_bar.php");

// определим массив данных
$datay=array(13,8,16,3,1,5,8,6,15,8,9,12);

// создадим область для вывода диаграммы
$graph = new Graph(400,300,"auto");

// определим масштабирование по осям
$graph->SetScale("textlin");

// добавим тень
$graph->SetShadow(true, 3, array(222,222,222));

// определим отступ для области вывода
$graph->img->SetMargin(40,30,20,40);

// определим цвет отступа
$graph->SetMarginColor('white');

// создадим рамку
$graph->SetFrame(true,'gray',1);

// создадим диаграмму
$bplot = new BarPlot($datay);

// определим цвет заполнения столбцов
$bplot->SetFillColor('#ff9900');

// покажем значения над каждым столбцом
$bplot->value->Show();

// установим формат вывода значений
$bplot->value->SetFormat('%d');

// установим цвет для значений
$bplot->value->SetColor('#0066ff');

// установим ширину столбцов
$bplot->SetWidth(0.6);

// добавим диаграмму в область вывода
$graph->Add($bplot);

// граница вокруг диаграммы
$graph->SetBox(true, 'gray');

// покажем и определим сетки значений
$graph->xgrid->Show();
$graph->xgrid->SetLineStyle('dashed');
$graph->xgrid->SetColor('gray');
$graph->ygrid->SetLineStyle('dashed');
$graph->ygrid->SetColor('gray');
$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#CCCCCC@0.5');

// спрячем метки на осях
$graph->xaxis->HideTicks();
$graph->yaxis->HideTicks();

// установим цвет осей и подписей
$graph->xaxis->SetColor('darkgray', 'darkgray');
$graph->yaxis->SetColor('darkgray', 'darkgray');

// определим шрифт для вывода подписей на осях
$graph->xaxis->title->SetFont(FF_VERDANA,FS_NORMAL);
$graph->yaxis->title->SetFont(FF_VERDANA,FS_NORMAL);

// определим отступ сверху
$graph->yaxis->scale->SetGrace(10);

// отобразим результат
$graph->Stroke();
?>

Приведу ссылки, по которым можно скачать JpGraph. Тут лежит версия для PHP4, которая НЕ будет работать в PHP5, а тут лежит версия под PHP5, которая, в свою очередь, не будет работать под PHP4. Размер обеих версий 3.9MB

Комментарии

1

Гуд штука. Сразу же захотелось куда-нибудь всё это прикрутить, да вот только пока некуда :)

2

А я бы все-таки не отметал JavaScript так сразу. По крайней мере эту гисторамму я бы на JavaScript-е бы делал. Но это кому как удобнее.

3

Не вижу ни одного плюса у JavaScript в этом случае.
Может расскажете хоть об одном?

4

Кто-нибудь знает какие-нибудь системы, разработки, которые используют ЭТИ библиотеки?

5

Мне очень понравилось решение на флеше PHP/SWF Charts. Очень красивые диаграммы получаются, плюс ко всему интерактивные.
Есть модуль для Perl - SWF::Chart.

6

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

7

Обязательно прикручу куда нибудь.
Спасибо большое, очень полезный и информативный пост...

8

Случайно наткнулась на Ваше описание и хороший пример JpGraph.
Уже попробовала с данными, которые получаются из MySQL-запроса.
Все работает. Постараюсь освоить этот класс и встроить в сайт нашего института для учета публикаций сотрудников.
Спасибо.

9

Обалдеть, здорово! ООП интерфейс, много возможностей. А я, блин, свою подобную библиотеку начинал писать, а тут все готовое. Единственный недостаток, это его громоздкость.

Мой класс рисует только гистограммы, но весит всего 10 кб ;)
(пример работы: http://computers.tonet.ru/catalog/?mode … m=00000727)

10

в копилку:
Open Source PHP OO Graph Rendering Utility -- http://graphpite.sourceforge.net/
PEAR::Image_Graph -- http://pear.veggerby.dk/
Французская либа -- http://artichow.org/

Добавить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>