Створення кругової діаграми за допомогою модуля GD:: Graph
h2>
Зараз,
щоб задовольнити потреби вибагливих користувачів, практично кожен
Інтернет-ресурс будується на динамічному відображенні представленої інформації.
Сьогодні ми розглянемо лише одну з таких можливостей, а саме - реалізацію
динамічних кругових діаграм. p>
Мова
програмування Perl пропонує розробникам великий інструментарій для
створення, обробки, зміни та управління змістом веб-сайтів. За допомогою
Perl-модуля GD:: Graph створення кругової діаграми стає справою простим і
доступною практично кожному. p>
До
Наприклад, ваш начальник хоче отримати порівняльний графік, що відображає
динаміку продажів в онлайні, в звичайних магазинах і за допомогою дистриб'юторів.
Сам графік повинен будуватися на основі CSV-файлу (Comma Separated Values),
який щотижня експортується з Microsoft Excel і розміщується в окремій
директорії в локальній мережі. Нам необхідно написати скрипт, автоматично
генерує кругову діаграму на основі наявних CSV-даних. p>
Лістинг 1 p>
1 use strict; p>
2 use GD:: Graph:: pie; p>
3 use Text:: CSV_XS; p>
4 p>
5 my @ data; p>
6 p>
7 my $ csv = new Text:: CSV_XS; p>
8 open (FILE, "excel.csv")
| | Die "Cannot open excel.csv: $! N"; p>
9 while (my $ line =) ( p>
10 $ csv-> parse ($ line); p>
11 my @ col = $ csv-> fields; p>
12 push (@ data, @ col); p>
13) p>
14 p>
15 my $ graph = new
GD:: Graph:: pie (300, 300); p>
16 p>
17
$ graph-> set ( p>
18
title => 'Заголовок кругової діаграми', p>
19
label => 'Пояснювальна підпис', p>
20
axislabelclr => 'black', p>
21 '3 d '=> 1, p>
22 start_angle => 90, p>
23 suppress_angle => 5, p>
24) p>
25 or warn $ graph-> error; p>
26 p>
27
$ graph-> set_title_font ( "/ usr/share/fonts/ttf/windows/times.ttf", 18); p>
28
$ graph-> set_value_font ( "/ usr/share/fonts/ttf/windows/times.ttf", 12); p>
29
$ graph-> set_label_font ( "/ usr/share/fonts/ttf/windows/times.ttf", 14); p>
30 p>
31 $ graph-> plot (@ data) or die
$ graph-> error; p>
32 p>
33
open (GRAPH, "> graph.jpg") | | die "Cannot open graph.jpg: $! n"; p>
34 print GRAPH
$ graph-> gd-> jpeg (100); p>
В
рядку 3 наведеного лістингу ми завантажуємо модуль Text:: CSV_XS, скачати
безкоштовну версію якого можна на CPAN (Comprehensive Perl Archive Network).
У рядку 7 створюємо новий об'єкт класу Text:: CSV_XS, відкриваємо CSV-файл у
рядку 8 і зчитуємо дані з файлу в масив @ data (рядки 9-13). Рядок 10
викликає метод parse (), який розбиває рядки файлу по колонках.
Сформовані колонки повертаються за допомогою методу fields () в рядку 11 і
додаються у вигляді ряду в масив @ data (рядок 12). Іншими словами, замість
формування масиву @ data вручну, ми можемо створити його з зовнішнього файлу (в
даному випадку - CSV). p>
Далі
(у рядку 15) створюємо об'єкт діаграми потрібної різновиди (в даному випадку --
pie) з заданим розміром зображення. p>
Третій
параметр у рядку 21 дорівнює 1, що передбачає створення тривимірної кругової
діаграми (значення "0" виводить двовимірний графік і використовується за
замовчуванням). Далі необхідно визначити початкову точку побудови діаграми, з
якої скрипт буде починати відлік секторів графіка. Значення задається в
градусах і за замовчуванням дорівнює "0" (ми встановили значення
"90", рядок 22). Також ми можемо встановити потрібне значення параметра
suppress_angle, який визначає мінімальний розмір сектора кругової
діаграми в градусах. p>
При
бажанні можна використовувати шрифти TrueType замість вбудованих. У рядках 27-29
вказуються назви гарнітур, що використовуються, відповідно, для заголовка
діаграми, найменування секторів і пояснювальних підписів до графіка. Цифри,
що йдуть після вказівки гарнітур, означають встановлений розмір шрифту. p>
В
рядку 33 виводиться зображення кругової діаграми в файл у форматі JPEG (або
PNG). У наступному рядку параметром методу jpeg () можна задати ступінь
оптимізації (якості) зображення (у відсотках). p>
В
даному випадку зображення діаграми виводиться у файл у графічному форматі,
однак можна його вивести у стандартний потік виведення STDOUT. Це може
знадобитися для створення "нальоту" діаграм відображення динамічно
змінюваних даних на веб-сторінці. Для цього доведеться трохи видозмінити
вищенаведений код програми. p>
Лістинг
1 p>
32
print "Content-type: image/jpegnn"; p>
33 binmode (STDOUT); p>
34 print
$ graph-> gd-> jpeg (100); p>
Щоб
вивести кругову діаграму на веб-сторінці, у потрібному місці документа слід
вставити наступну HTML-конструкцію: p>
p>
Список літератури h2>
Для
підготовки даної роботи були використані матеріали з сайту http://www.soch.imperium.by
p>