На веб-странице необходимо организовать визуальное представление данных в виде графиков или диаграмм.

Опубликовал: Sunday, June 9, 2024 в категории jQuery, Подборка рецептов | Пока нет комментариев

Решение

Для решения поставленной задачи применим jqPlot — один из самых удачных плагинов к библиотеке jQuery и уж совершенно точно самый мощный среди плагинов, позволяющих реализовывать графики и диаграммы. Плагин имеет очень много всевозможных настроек, описанию которых можно посвятить отдельную книгу. Поэтому мы остановимся на рассмотрении основных возможностей и на относительно простых примерах познакомимся с принципами реализации различных типов графиков, что позволит в дальнейшем самостоятельно решить задачи, не описанные в этой главе. Листинг 13.1.1 иллюстрирует простейший пример использования плагина jqPlot.

Листинг 1 3 .1 .1 . Использование плагина j qPl ot

Обсуждение

Прежде чем начать обсуждение, посмотрите на рис. 13.1, на котором показан результат выполнения кода, приведенного в листинге 13.1.1.

График, представленный на рис. 13.1, выглядит очень изящно, но еще более впечатляет код в листинге 13.1.1 — буквально одна строка JavaScript-кода и простейшая HTML-разметка, состоящая из элемента div с идентификатором example и размерами, заданными в атрибуте style.

Но конечно далеко не все так просто — чтобы получить такой график, сначала нужно подключить к веб-странице несколько необходимых файлов, среди которых, конечно же, файл библиотеки jQuery — js/jquery-1.5.2.min.js. Кроме этого потребуются файл плагина jquery.jqplot.min.js и файл его стилевого оформления jquery.jqplot.css.

Я не упомянул еще об одном подключаемом файле, который предназначен для браузеров IE — excanvas.min.js. Для того чтобы создавать графические формы, рисовать линии, вращать изображения, плагин использует тег <canvas> — элемент HTML 5, предназначенный для создания растрового изображения при помощи JavaScript. Браузеры FireFox, Opera, Chrome, Safari поддерживают тег <canvas>. Как обычно, исключением оказался Internet Explorer — в 8-й версии этот тег еще не поддерживается. Тут на помощь пришла компания Google, реализовав для IE полноценный API Canvas, — это и есть файл excanvas.js.

Вернемся теперь к обсуждению JavaScript-кода из листинга 13.1.1. Совершенно очевидно, что мы передали плагину два параметра — идентификатор элемента, в который будет осуществляться вывод графика, и координаты точек, по которым этот график будет построен. Все остальное плагин jqPlot проделал вполне самостоятельно.

Рис. 13.1. Результат использования плагина jqPlot с настройками по умолчанию

Есть еще необязательный (но на практике очень важный) параметр — объект, в котором плагину передаются многочисленные настройки. Получается, что применить на веб-странице плагин jqPlot с настройками по умолчанию очень легко, но гораздо сложнее изучить эти настройки.

Этим мы и начнем заниматься на примере, приведенном в листинге 13.1.2.

Листинг 1 3 .1 .2 . Использование плагина jqPlot

С первого взгляда становится ясно, насколько усложнился код в листинге 13.1.2. Мы подключили те же самые внешние файлы, в HTML-разметке по-прежнему присутствует элемент div с идентификатором example, но JavaScript-код значительно изменился. Его изучению мы и уделим основное внимание. Но сначала посмотрим на результат выполнения этого кода (рис. 13.2).

Первое, что мы делаем в JavaScript-коде, — подготавливаем три массива, по которым будут построены три графика. Затем мы вызываем плагин jqPlot, в первом аргументе передаем ему идентификатор элемента, в который будут выводиться графики, во втором аргументе — массив из приготовленных ранее данных и, наконец, в третьем аргументе — объект с настройками плагина. Если с первыми двумя аргументами все более или менее понятно, то с третьим аргументом знакомство только предстоит.

Рис. 13.2. Результат использования плагина jqPlot

Итак, первое свойство объекта называется title, его значение — строка, в которой можно указать название графика.

Следующее свойство — axes. Его значение также является объектом, в свойствах yaxis и xaxis которого описываются соответствующие оси координат. Значения свойств yaxis и xaxis тоже объекты, но уже описывающие конкретные характеристики осей координат. В примере из листинга 13.1.2, в свойствах min и max указаны минимальные и максимальные значения для соответствующих шкал.

Следующее свойство объекта настроек — series — массив, каждый элемент которого есть объект, характеризующий какой-либо из графиков. Нетрудно догадаться, что свойство color описывает цвет, а в свойстве label хранится метка для соответствующего графика.

Последнее свойство, представленное в примере из листинга 13.1.2, — legend — объект, характеризующий легенду графика. Свойство show этого объекта принимает логические значения. В случае true плагин будет отображать легенду. Свойство location — расположение легенды. Значение ne заставит плагин поместить легенду в правом верхнем углу (ne — это nord-east, северо-восток). Свойства xoffset и yoffset определят отступы легенды от края.

В общем, все оказалось не так уж и сложно, поэтому двигаемся дальше и рассмотрим пример, приведенный в листинге 13.1.3.

Листинг 1 3 .1 .3 . Использование плагина jqPlot

Сразу же посмотрим на рис. 13.3, на котором можно увидеть результат выполнения кода.

А теперь начнем разбирать пример из листинга 13.1.3. HTML-разметка страницы осталась прежней, только немного изменились размеры, заданные в атрибуте style элемента div.

А вот среди подключаемых внешних файлов произошли изменения. Дополнительно был подключен файл js/plugins/jqplot.pieRenderer.min.js, который служит как раз для того, чтобы иметь возможность организовать круговую диаграмму.

Вообще, следует отметить, что jqPlot, который является плагином для библиотеки jQuery, в свою очередь имеет набор собственных плагинов, реализующих различ-

ные виды графиков и действия над ними. Один из таких плагинов — файл jqplot.pieRenderer.min.js.

Займемся рассмотрением JavaScript-кода. Вначале все практически так же, как и в предыдущих примерах. Готовим данные для построения диаграммы, которые храним в переменной line1. Обратите внимание, что метку можно указать непосредственно в массиве, описывающем конкретную величину. Затем вызываем плагин jqPlot, в первом аргументе передаем ему идентификатор элемента, в котором будет построена диаграмма. Второй аргумент — массив, содержащий данные для построения диаграммы. И, наконец, третий аргумент — объект с настройками.

Рис. 13.3. Результат использования плагина jqPlot

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

А вот с важным свойством seriesDefaults мы пока не встречались. Значение этого свойства — объект, в котором определяются настройки по умолчанию. Передавая в этом объекте его отдельные свойства, можно переопределить поведение плагина. Так мы изменяем значение опции renderer на $.jqplot.PieRenderer, в отличие от определенного по умолчанию значения $.jqplot.LineRenderer, чтобы рисовать не

линейные графики, а круговую диаграмму. В опции rendererOptions, значение которой в свою очередь тоже является объектом, передаем одну из настроек — sliceMargin для того, чтобы организовать отступы между сегментами круговой диаграммы.

Следующий пример — диаграмма, где значения представлены в виде столбцов. Код примера приведен в листинге 13.1.4.

Листинг 1 3 .1 .4 . Использование плагина jqPlot

Сразу же посмотрим, как выглядит результат работы этого кода (рис. 13.4).

Рис. 13.4. Результат использования плагина jqPlot

Опять HTML-разметка почти не изменилась, но мы были вынуждены подключить довольно много внешних файлов для реализации диаграммы, представленной на рис. 13.4. Помимо библиотеки jQuery, стилевого файла плагина jqPlot и собственно самого файла плагина, потребовались файлы js/plugins/jqplot.barRenderer.min.js, js/plugins/jqplot.categoryAxisRenderer.min.js и js/plugins/jqplot.pointLabels.min.js.

В JavaScript-коде тоже все довольно понятно, но, памятуя, что "повторение — мать учения", разберем JavaScript-код из листинга 13.1.4, как всегда, весьма подробно.

Как обычно, сначала готовим данные. На этот раз это два массива, которые мы храним в переменных line1 и line2. Вызываем плагин jqPlot. Первый параметр — идентификатор элемента div, куда выводится диаграмма. Второй параметр — данные, третий — объект с настройками.

Опция title нам уже хорошо знакома — это заголовок диаграммы. С опцией stackSeries только предстоит познакомиться. Она может принимать логические значения. В данном случае значение true заставит плагин расположить столбцы

друг за другом — "стопкой". Следующая опция seriesDefaults нам тоже немного знакома. В свойстве renderer указываем значение $.jqplot.BarRenderer, чтобы рисовать диаграмму в виде столбцов. В свойстве rendererOptions передаем объект только с одним свойством barMargin, чтобы установить размеры полей для столбцов диаграммы. И, наконец, опция pointLabels, в которой передаем плагину еще один объект со свойствами show и stackedValue. Значение true в первом случае разрешит отображать метки, а во втором — определит отображение значений столбцов диаграммы такой же "стопкой", как и сами столбцы.

Последние свойство в объекте настроек — axes — поможет нам описать оси координат в том виде, в котором мы их хотим видеть. В свойстве xaxis передаем объект, где в опции renderer указываем значение $.jqplot.CategoryAxisRenderer — т. е. плагин для jqPlot, который будет использован для построения оси X. Теперь значения шкалы не будут рассчитываться автоматически. Вместо этого под каждым столбцом диаграммы появится название категории, и поскольку мы не задали явно эти названия, то они будут обозначены цифрами. В свойстве yaxis передаем объект, где в опции ticks указываем массив, значения которого необходимы для построения оси Y.

Осталось разобрать последний и очень интересный пример, код которого приведен в листинге 13.1.5.

Листинг 1 3 .1 .5 . Использование плагина jqPlot

Сразу же посмотрим на результат выполнения кода (рис. 13.5).

Рис. 13.5. Результат использования плагина jqPlot

Это очень полезная возможность плагина jqPlot. Во-первых, данный график можно изменять, перемещая его узлы (отмеченные точками) с помощью указателя мыши. Во-вторых, при этом автоматически рассчитывается линия тренда.

Для создания такой функциональности потребуется подключить дополнительные файлы. Посмотрите код, приведенный в листинге 13.1.5, — мы подключили два плагина: js/plugins/jqplot.dragable.min.js и js/plugins/jqplot.trendline.min.js. Первый реализует возможность перемещения узлов графика с помощью указателя мыши, второй — рассчитывает линию тренда.

Сам JavaScript-код довольно прост, т. к. мы не передаем никаких дополнительных настроек, за исключением заголовка. Остальные действия выполняем как обычно — готовим данные, вызываем плагин, которому передаем идентификатор целевого элемента, данные и немного настроек.

Обратить внимание следует разве на строку $.jqplot.config.enablePlugins = true, которая раньше нигде не встречалась. Начиная с версии 0.9.7 необходимо явно включить плагины, установив значение true для опции конфигурации enablePlugins или для опции show в настройках, передаваемых плагину (так было сделано в примере из листинга 13.1.4 для опции pointLabels).

В заключение остается сказать, что мы рассмотрели далеко не все возможности плагина jqPlot по организации графиков и диаграмм, но получили достаточно информации, чтобы суметь самостоятельно решать подобного рода задачи. В качестве дополнительных материалов можно воспользоваться большой коллекцией примеров на сайте разработчика плагина http://www.jqplot.com/, а увидеть перечень всех возможных опций можно на странице http://www.jqplot.com/docs/files/ jqPlotOptions-txt.html.

Источник: Самков Г. А. jQuery. Сборник рецептов. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. — 416 с.: ил. + CD-ROM — (Профессиональное программирование)

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *