pChart – рисуем графики в PHP
Рисование графиков и гистограмм – не самая частая задача, с которой может столкнуться программист на PHP, но порой такое происходит. Существует несколько php-библиотек, предназначенных для рисования графиков, но наиболее популярной из них является pChart. С ее помощью вы без труда сможете нарисуете графики, гистограммы, «пироги» и тп.
Скачав и распаковав rar-архив с последней версией pChart с официального сайта проекта (на момент написания статьи последняя версия имела номер 1.27d), вы увидите различные каталоги и файлы с именами Example(номер).php. Так вот, 90% этого добра нам не нужно. Ну разве что имеет смысл изучить примеры. Реальную ценность представляют только два файла – pChart/pData.class и pChart/pChart.class.
В первом содержится описание класса pData. Он предназначен для хранения данных, которые в дальнейшем будут выведены на график/гистограмму – подписи по осям, непосредственно выводимые значения и тд. В файле pChart.class содержится описание класса pChart, отвечающего за само рисование графиков. Данные для графиков он получает от класса pData.
Описание атрибутов и методов классов pChart и pData можно найти в самих *.class файлах, или посмотреть, как эти классы используются в примерах. В этой статье мы рассмотрим простенький скрипт, рисующий гистограмму.
<?php // подключаем pChart include "./pChart/pChart.class"; include "./pChart/pData.class"; // генерируем случайные данные для вывода на гистограмму $series = array(); mt_srand(time()); for($i = 0; $i < 18; $i++) { $series[0][] = "$i.12"; $series[1][] = 5000 + mt_rand(-500, +500); $series[2][] = $series[1][$i] - mt_rand(100, 200); } // теперь помещаем данные в специальный класс - pData $data = new pData; $n = 0; foreach($series as $k => $v) { if(++$n == 1) { $keySerie = "$k"; // $series[0] - это подписи по оси абсцисс $ksSize = count($v); } $data->AddPoint($v, "$k"); } $data->AddAllSeries(); $data->RemoveSerie($keySerie); $data->SetAbsciseLabelSerie($keySerie); // теперь готовим гистограмму $chart = new pChart(512,192); // задаем шрифт $chart->setFontProperties("tahoma.ttf", 8); // какую часть изображения выделить под гистограмму? $chart->setGraphArea(50, 10, 512, 150); // рисуем шкалу; описание аргументов метода - в файле pChart.class $chart->drawScale($data->GetData(),$data->GetDataDescription(), SCALE_NORMAL | SCALE_START0 /*mode*/,/* rgb */0,0,0,TRUE,90,2,TRUE); // рисуем сами "столбики" $chart->drawBarGraph($data->GetData(),$data->GetDataDescription(), FALSE /* shadow */, 100 /* alpha */, FALSE /* black border */); // выводим результат $chart->Stroke(); ?>
Полный исходный код примера можно скачать здесь. Вот так будет выглядеть результат работы скрипта:

Цвета столбцов и угол наклона подписей по оси абсцисс при желании можно поменять. Также без особого труда можно добавить название графика и легенду.
Как видите, pChart – мощная и достаточно простая в использовании библиотека, распространяемая при этом абсолютно бесплатно. К недостаткам pChart можно отнести относительно невысокую скорость работы. Например, модуль GD::Graph, активно используемый программистами на Perl, работает ощутимо быстрее.
Постовые:
- Ищите работу? Срочно требуется персонал? Сайт работа в Одессе – это самые свежие вакансии и резюме.
- Не понимаешь анекдоты про котэ и шредер? Читай реальные приколы про сисадминов на PROAdminov.Ru. Здесь приколы действительно смешные, а не как на баше :)
- Если Вы планируете создать свой сайт, приглядитесь повнимательнее к системе управления контентом (CMS) Joomla. Плагины и шаблоны Joomla позволяют обеспечить необходимый функционал и придать индивидуальность Вашему сайту. Это действительно отличный движок.
Комментарии
28 комментариев на pChart – рисуем графики в PHP
-
Интересная библиотека.
Спасибо. Я недавно долго мучался с добавлением правильного watermark.
Даже в своем блоге опубликовал наработку. Хорошо будет собрать блоги именно разработчиков, или скриптов на php. -
Анатолий Пискунов, рад, что статья Вам понравилась. А что вы имели ввиду, говоря «собрать блоги»?
-
Николай
2010.03.09 в 12:31
Большое спасибо! Это именно то что я искал :)
-
Пока не сталкивался с подобными задачами, но сразу понравилась простота кода. Я думаю с помощью этой библиотеки достаточно просто прикручивать диаграммы куда заблагорассудится :)
-
Великолепная статья, правда.
Это то,что мне сейчас действительно нужно, т.к. сейчас делаю «сайт» – онлайн программу по учету анализов вирусологической лаборатории, так вот там, для наглядности придется придется строить различных графиков.
Например отношение анализов по гос.заказу (свиной грипп) к коммерческим заказам (анонимный тест на сифон :) и т.п.)Добавил закладку в избранное.
ps
А я для реализации своей задачи планировал генерировать файл экселя и отображать его в браузере.. -
Белоногов Илья, а современные браузеры уже умеют просматривать Excel или есть какие-то библиотеки для этого?
-
Абалденные графики! Обязательно использую разработку в своих проектах! Спасибо!!
-
Успешный разработчик, а что за проекты Вы готовите, если не секрет? :)
-
Baby
2010.03.10 в 21:06
хм… сейчас попробуем нарисовать простенький график, хотя и не силен в пхп, но попытка не пытка… тем более все расписано =)
-
Класс. У меня программист искал. Сегодня ткну его в пост))
-
Если у кого-нибудь есть пожелания, о чем написать следующую статью по программированию, пишите, не стесняйтесь.
-
Даже не знал о такой библиотеке, строи на ява графики.
Да есть желание по поводу написания следующей статьи.. Кто нибудь знает как скрыть рефера с помощью Php?
-
Zircool, скрыть рефера – это в контексте комментирования блогов с целью продвижения сайта или? :)
-
Отличная статья. Все подробно и понятно написано. Надо будет взять эту библиотеку на заметку.
-
Belinskiy, рад, что Вам понравилась. Нет ли пожеланий, чему посветить следующую «программерскую» статью?
-
Вадим
2010.03.18 в 07:47
Прикольные графики, у себя на блоге обязательно сделаю!
-
Вадим, а зачем Вам в блоге графики, если не секрет? :)
-
Хм, иногда можно использовать на блоге для визуального опубликования каких-либо данных. Думаю пригодится.
-
Петр
2010.04.14 в 11:43
Супер!
А скажите, как сделать, чтоб числа $i.12 отображадись горизонтально? -
Безумный Программист
2010.04.14 в 12:31
Петр, я уже точно не помню, но посмотрите аргументы $chart->drawScale. Тот, который в примере равен 90, по-моему, нужно заменить на 0.
-
Гость
2010.04.19 в 00:51
пример не работает :( У меня PHP 5.3.1 наверно не совместим
-
Безумный Программист
2010.04.19 в 08:26
Гость, Вы мне напомнили историю про системного администратора. «Алло, Саша? У нас тут не работает!» – «Что не работает?» – «Все на работает!». Потом выясняется, что принтер был выключен из сети. Это я вот к чему. Если «пример не работает», покажите, пожалуйста, коды ошибок. Может, у Вас вообще GD не установлен.
-
Олег
2010.05.11 в 18:39
вот здесь еще ниче построили график http://prootime.ru/css-graph
-
Безумный Программист
2010.05.11 в 18:59
Олег, признайтесь, небось Вас же блог то :)
-
ага, наконец-то нашёл библиотеку с красивой графикой, а не как в win 3.11
спасибо -
Глюкавая либа но красивая.
Если строить бар график с данными (1) то нельзя его сделать по высоте менее 120 символов. Там неправильно отрисовывается скейл. -
Владимир
2010.07.22 в 00:16
Пожалуйста подскажите, как для данного примера добавить легенду :(
-
Безумный Программист
2010.07.22 в 11:49
Владимир, http://pchart.sourceforge.net/documentation.php?topic=pChart – см описание drawLegend()


2010.03.09 в 11:59