Как нарисовать диаграмму с помощью GD::Graph и perl

Заметки о создании диаграмм с помощью perl и GD::Graph. Примеры кода. Примеры создания диаграмм для фондового рынка.

Все примеры протестированы в windows-среде. Я не ставила перед собой цели создать объемное руководство по GD::Graph, поэтому ниже в основном только примеры кода.

 

Линейные диаграммы

Можно выбрать несколько вариантов отрисовки линейных диаграмм:

  • просто линия на графике (модуль GD::Graph::lines),
  • линия на графике с заливкой (GD::Graph::area),
  • линия на графике с обозначением точек (GD::Graph::linespoints),
  • только точки на графике, без линии (GD::Graph::points).

lineGraph

Логически, построение диаграммы с помощью GD::Graph делится на три этапа:

  1. Подготовка данных.
  2. Создание объекта диаграммы, задание параметров будущего графика.
  3. Создание диаграммы.

Метод new() создает объект GD::Graph, тут же указывается размер будущего изображения графика в пикселях. Первое значение - ширина изображения, второе - его высота.

Метод set() позволяет задать параметры будущего графика, например, цвета для линий диаграммы, правила отрисовки значений вдоль осей X и Y, подписи к каждой из осей, заголовок диаграммы и т.п.

Метод plot() - строит график и возвращает объект GD, который можно использовать для создания png или gif-изображения. Метод ожидает в качестве аргумента ссылку на массив, который содержит в качестве первого элемента - ссылку на массив значений оси X. В качестве второго элемента - ссылка на массив со значениями для оси Y. Может быть передано более двух массивов. Данные третьего и других дополнительных массивов так же будут использоваться для отрисовки по оси Y других графиков.

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

Чтобы получить диаграмму с цветной заливкой, надо в вышеприведенном коде всего лишь заменить строки с "GD::Graph::lines" на "GD::Graph::area".

areaGraph

Тоже самое для "GD::Graph::linespoints" и "GD::Graph::points".

linesPoints

 

Столбчатая диаграмма

Вертикальная столбчатая диаграмма реализуется с помощью модуля GD::Graph::bars, горизонтальная столбчатая диаграмма с помощью - GD::Graph::hbars.

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

bars

 

Круговая диаграмма

Круговые диаграммы рисуются с помощью модуля GD::Graph::pie.

pieGraph

 

Диаграммы для любителей биржевой торговли и форекса, "свечи"

"Свечи" мне нравятся больше "баров", я считаю их более удобными для восприятия информации. Поэтому, ниже приводится пример диаграммы со свечами.

candle2

 

Создание смешанных типов диаграмм с помощью GD::Graph::mixed

Наверняка, многие из тех, кто занимается рынками, используют различные индикаторы и параметры объема торговли. Внешне это выглядит как раз, как несколько разных типов диаграмм в одном окне. Например, график свечей + линейные графики (стохастические индикаторы), или свечи + столбчатые диаграммы (объем), ну и т.п. Ниже пример, как реализовать подобный график с помощью GD::Graph::mixed. Пример кода:

Параметр types при установке параметров будущей диаграммы, указывает очередность отрисовки разных типов диаграмм.

candle3

 

Русские буквы на диаграммах GD::Graph

Попробовала разные решения, которые предлагаются в интернете, у меня заработало только одно из них.

Стандартные шрифты GD не русифицированы, вместо них следует использовать русифицированные ttf шрифты, я взяла arial.ttf. Дополнительные преобразования нужны, чтобы передать модулю GD::Graph латиницу в виде десятичных значений символов в Unicode - как ему это необходимо.

rusbars

 

Полезные ссылки по теме GD::Graph и perl

search.cpan.org: GD::Graph

search.cpan.org: GD::Graph::candlesticks

mysterria.com: GD::Graph и русский язык

Let’s Make Some Graphs!

Create a Graph with Perl’s GD::Graph

A mixed chart created with GD::Graph::mixed

 

Как нарисовать диаграмму с помощью GD::Graph и perl: 1 комментарий

  1. zzz

    думаю, на клиенте тоже самое делать более разумно.

Комментарии запрещены.