Исследование Perl модулей, часть 2: Рисуем диаграммы с использованием GD::GraphТипичное использование GD::GraphPerl скрипт с использованием GD::Graph как правило состоит из следующих вещей:
Пристой примерНарисуем простой график. Для этого мы напишем CGI скрипт, выводящий изображение на вебстраницу. #!/usr/local/bin/perl -w use CGI ':standard'; use GD::Graph::bars; use strict; # Подготовка данных, на основе которых будет строиться график. my @data = (["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], [23, 5, 2, 20, 11, 33, 7, 31, 77, 18, 65, 52]); my $mygraph = GD::Graph::bars->new(500, 300); $mygraph->set( x_label => 'Month', y_label => 'Number of Hits', title => 'Number of Hits in Each Month in 2002', ) or warn $mygraph->error; my $myimage = $mygraph->plot(\@data) or die $mygraph->error; print "Content-type: image/png\n\n"; print $myimage->png; На результат работы программы можно взглянуть здесь
Код приграммы говорит сам за себя. Настройка опцийКак вы видите, мы нарисовали чрезвычайно простой график. Мы можем сделать его посимпатичнее подкрутив некоторые свойства. Диаграммы разного типа обладают некоторым набором общих свойств, но есть так же и свойства, характерные для каждого типа диаграмм. Свойства могут быть заданы при создании диаграммы $mygraph->set(attrib1 => value1, attrib2 => value2, ...); Напишем скрипт с легендами, сеткой, и еще несколькими опциями #!/usr/local/bin/perl -w use CGI ':standard'; use GD::Graph::bars; use strict; # Заносим данные my @data = (['Fall 01', 'Spr 01', 'Fall 02', 'Spr 02' ], [80, 90, 85, 75], [76, 55, 75, 95], [66, 58, 92, 83]); my $mygraph = GD::Graph::bars->new(500, 300); $mygraph->set( x_label => 'Semester', y_label => 'Marks', title => 'Grade report for a student', # Draw bars with width 3 pixels (не ручаюсь за точность, оставил без перевода. А.Ч.) bar_width => 3, # Sepearte the bars with 4 pixels (не ручаюсь за точность, оставил без перевода. А.Ч.) bar_spacing => 4, # Показывать сетку long_ticks => 1, # Показывать значения над столбиками show_values => 1, ) or warn $mygraph->error; $mygraph->set_legend_font(GD::gdMediumBoldFont); $mygraph->set_legend('Exam 1', 'Exam 2', 'Exam 3'); my $myimage = $mygraph->plot(\@data) or die $mygraph->error; print "Content-type: image/png\n\n"; print $myimage->png; На результат работы программы можно взглянуть здесь График с логотипомКак видите, GD::Graph обладает определенной гибкостью. Попробуем сделать график с логотипом. #!/usr/local/bin/perl -w use CGI ':standard'; use lib '/cise/homes/ppadala/mydepot/lib/perl5/site_perl'; use GD::Graph::bars; use strict; # Заносим данные my @data = (['Fall 01', 'Spr 01', 'Fall 02', 'Spr 02' ], [80, 90, 85, 75], [76, 55, 75, 95], [66, 58, 92, 83]); my $mygraph = GD::Graph::bars->new(500, 300); $mygraph->set( x_label => 'Semester', y_label => 'Marks', title => 'Grade report for a student', # Draw bars with width 3 pixels bar_width => 3, # Sepearte the bars with 4 pixels bar_spacing => 4, # Показывать сетку long_ticks => 1, # Показывать значения над столбиками show_values => 1, ) or warn $mygraph->error; $mygraph->set(logo => 'lglogo.png'); $mygraph->set(logo_resize => 0.5); $mygraph->set(logo_position => 'LL'); $mygraph->set_legend_font(GD::gdMediumBoldFont); $mygraph->set_legend('Exam 1', 'Exam 2', 'Exam 3'); my $myimage = $mygraph->plot(\@data) or die $mygraph->error; print "Content-type: image/png\n\n"; print $myimage->png; На результат работы программы можно взглянуть здесь Тут находится логитип Linux Gazette, который я использовал. Он представлен в формате PNG. В настоящий момент GD::Graph не может работать с какими-либо форматами кроме GIF (но при этом может сохранять и выводить изображение в других форматах).Я написал и отправил патч, который следует применить. ( Текущая версия GD::Graph - 1.35 от 9 июня 2002 г., а статья вышла позже, так что до выхода следующей версии модуля придется применять патч. А.Ч.). Обычный графикНекоторую информацию удобнее представлять в виде простых всем привычных графиков. #!/usr/local/bin/perl -w use CGI ':standard'; use GD::Graph::lines; use strict; # Заносим данные. my @data = (['Fall 01', 'Spr 01', 'Fall 02', 'Spr 02' ], [80, 90, 85, 75], [76, 55, 75, 95], [66, 58, 92, 83]); my $mygraph = GD::Graph::lines->new(600, 300); $mygraph->set( x_label => 'Semester', y_label => 'Marks', title => 'Grade report for a student', # Делаем линии сплошной (solid), пунктирной (dashed), и штрих-точкой (dotted-dashed) line_types => [1, 2, 4], # Задаем толщину линий line_width => 2, # Задаем цвета dclrs => ['blue', 'green', 'cyan'], ) or warn $mygraph->error; $mygraph->set_legend_font(GD::gdMediumBoldFont); $mygraph->set_legend('Exam 1', 'Exam 2', 'Exam 3'); my $myimage = $mygraph->plot(\@data) or die $mygraph->error; print "Content-type: image/png\n\n"; print $myimage->png; На результат работы программы можно взглянуть here В данном случае я использовал GD::Graph::lines. Круговая диаграмма
#!/usr/local/bin/perl -w use CGI ':standard'; use GD::Graph::pie; use strict; # Заносим данные. my @data = (['Project', 'HW1', 'HW2', 'HW3', 'MidTerm', 'Final'], [25, 6, 7, 2, 25, 35]); my $mygraph = GD::Graph::pie->new(300, 300); $mygraph->set( title => 'Grading Policy for COP5555 course', '3d' => 1, ) or warn $mygraph->error; $mygraph->set_value_font(GD::gdMediumBoldFont); my $myimage = $mygraph->plot(\@data) or die $mygraph->error; print "Content-type: image/png\n\n"; print $myimage->png; На результат работы программы можно взглянуть здесь Для того, чтобы придать диаграмме объем, использовалась опция '3d'. Диаграмма с областями#!/usr/local/bin/perl -w use CGI ':standard'; use GD::Graph::area; use strict; # Задаем данные. my @data = (["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], [23, 5, 2, 20, 11, 33, 7, 31, 77, 18, 65, 52]); my $mygraph = GD::Graph::area->new(500, 300); $mygraph->set( x_label => 'Month', y_label => 'Number of Hits', title => 'Number of Hits in Each Month in 2002', ) or warn $mygraph->error; my $myimage = $mygraph->plot(\@data) or die $mygraph->error; print "Content-type: image/png\n\n"; print $myimage->png; На результат работы программы можно взглянуть здесь Модуль GD::Graph является достаточно удобным инструментом и неплохо подходит для создания динамических иллюстрация к вебстраницам. Источник статьи |