Библиотека диаграмм JavaScript корпоративного уровня
Highcharts — это JavaScript-библиотека для построения диаграмм корпоративного уровня, основанная на SVG. Впервые он был выпущен в 2009 году компанией Highsoft в Вике, Норвегия.
Highcharts поддерживает длинный список различных типов диаграмм, включая line
, spline
, area
, areaspline
, column
, bar
, pie
, scatter
, scatter3d
, heatmap
, treemap
, gauge
и почти все типы диаграмм. Он поставляется с отличной документацией и бесчисленными примерами. Это мощный с низкой кривой обучения. Единственным недостатком является то, что лицензия является частной. Это бесплатно для личного / некоммерческого использования, но вы должны платить за коммерческие приложения.
Наряду с D3.js, Highcharts доминирует в приложении для построения графиков. Давайте посмотрим, как это работает.
Настройте рабочую среду
Мы собираемся использовать Create React App для изучения Highcharts. Следующая команда создает проект React:
% yarn create react-app react-highcharts % cd react-highcharts
Установите highcharts
и highcharts-react-official
.
highcharts
: Это библиотека построения диаграмм JavaScript.highcharts-react-official
: Это официальная оболочка для React, поддерживаемая Highcharts.
% yarn add highcharts highcharts-react-official
После установки эти пакеты становятся частью dependencies
в package.json
:
"dependencies": { "highcharts": "^10.3.2", "highcharts-react-official": "^3.1.0" }
В рабочей среде добавить диаграмму так же просто, как добавить одну строку кода:
<HighchartsReact highcharts={Highcharts} options={option} />
Пример 1: Диаграммы основных типов
Ряд данных — это ряд чисел, нанесенных на график в виде строки или столбца. Для нашего примера создайте два простых ряда данных, каждый из которых имеет шесть точек.
series: [ { data: [1, 2, 1, 4, 3, 6], }, { data: [2, 7, 0, 4, 6, 2], }, ]
Измените src/App.css
, чтобы иметь макет flex
.
div { display: flex; flex-wrap: wrap; }
Измените src/App.js
, чтобы построить восемь диаграмм типа line
, spline
, area
, areaspline
, column
, bar
, pie
и scatter
.
- В строках 6–28 создается конфигурация диаграммы.
– В строках 7–11 определяютсяtype
,width
иheight
диаграммы.
– В строках 12–14 составляется заголовок диаграммы. от типа. Поскольку lodash поставляется с приложением Create React, вызывается_.startCase
, чтобы сделать каждую начальную букву заглавной.
— В строках 15–19,yAxis
, ось Y или ось значений настроена с помощьюtitle
.
– В строках 20–27 создаются два ряда данных. - В строках 33–40 каждая строка создает диаграмму указанного типа:
–line
(строка 33): Линейная диаграмма представлена рядом точек данных, соединенных прямой линией.
–spline
(строка 34): сплайновая диаграмма рисует кривую линию между точками ряда данных.
–area
(строка 35): диаграмма с областями функционирует так же, как линейная диаграмма, за исключением того, что она заполняет область между линия и пороговое значение, которое по умолчанию равно 0.
–areaspline
(строка 36): диаграмма с областями аналогична диаграмме с областями, за исключением того, что линия представляет собой сплайн, а не прямую линию.
> –column
(строка 37): столбчатая диаграмма отображает данные в виде вертикальных полос.
–bar
(строка 38): столбчатая диаграмма аналогична столбчатой диаграмме, за исключением того, что ось X и ось Y переключено.
–pie
(строка 39): круговая диаграмма представляет собой круговую диаграмму, разделенную на сектора, которые пропорциональны количеству, которое она представляет.
–scatter
(строка 40): точечная диаграмма рисует точку для каждой точки данных без их соединения.
Выполните yarn start
, и мы увидим восемь диаграмм, каждая из которых относится к определенному типу.
Пример 2: Кредиты диаграммы и меню экспорта
Посмотрите на скриншот выше. По умолчанию Highcharts помещает метку/ссылку на кредиты в правом нижнем углу диаграммы.
Текст и ссылку можно настроить. И вот пример:
credits: { text: 'My Credits', href: 'https://jenniferfubook.medium.com/jennifer-fus-web-development-publications-1a887e4454af', }
Или его можно отключить с помощью этого кода:
credits: { enabled: false, }
Модуль экспорта Highcharts предоставляет меню с элементами меню, связанными с экспортом, для View in full screen
, Print chart
, Download PNG image
, Download JPEG image
, Download PDF document
и Download SVG vector image
.
Этот модуль может быть включен в одну строку кода.
require('highcharts/modules/exporting')(Highcharts);
Или две строки:
import HighchartsExporting from 'highcharts/modules/exporting'; HighchartsExporting(Highcharts);
По умолчанию меню находится в правом верхнем углу графика. Расположение и содержание могут быть настроены.
Вот модифицированный src/App.js
:
- В строках 5–6 загружается модуль экспорта.
- В строках 30–32 кредиты по умолчанию отключены.
Выполняем yarn start
и видим восемь графиков. У каждой диаграммы есть меню экспорта, а кредиты отключены.
На линейной диаграмме щелкните элемент меню Print chart
, и откроется модальное окно, чтобы распечатать диаграмму или сохранить ее в виде файла PDF.
На линейной диаграмме щелкните пункт меню Download PNG image
, и он сохранит файл PNG в папку Downloads
.
Каждую диаграмму можно сохранить в формате JPEG, PDF или SVG.
Пример 3. Базовые диаграммы в 3D-виде
highcharts-3d
— это модуль Highcharts, обеспечивающий поддержку 3D. Его необходимо импортировать для создания 3D-диаграмм.
Этот модуль может быть включен в одну строку кода.
require('highcharts/highcharts-3d')(Highcharts);
Или две строки:
import Highcharts3D from 'highcharts/highcharts-3d'; Highcharts3D(Highcharts);
Настройка трехмерной диаграммы аналогична настройке обычной диаграммы, за исключением следующих параметров:
options3d
настраивает параметр 3D. Флагenabled
включает трехмерную диаграмму.alpha
иbeta
— это углы поворота вида диаграммы, аdepth
определяет общую глубину со значением по умолчанию100
. Вот пример:
options3d: { enabled: true, alpha: 15, beta: 30, depth: 300, }
plotOptions.[type].depth
определяет глубину каждого графика.- Данные диаграммы могут быть в разных форматах для каждого типа.
xAxis
определяет ось X или ось категории. Для наших 3D-примеров определены триxAxis
для графиков на разной глубине, хотя сами этиxAxis
не видны.
Вот модифицированный src/App.js
:
- В строках 6 и 8 загружается 3D-модуль Highcharts.
- В строках 13–18
options3d
включает трехмерные диаграммы и настраивает углы поворота и глубину. - В строках 28–38 три
xAxis
становятся невидимыми. - В строках 39–43 для
plotOptions.[type].depth
установлено значение 100. - В строках 44–57
series
определяет графики дляxAxis 0
,xAxis 1
иxAxis 2
. Каждый участок имеет шесть точек.
Выполните yarn start
, и мы увидим восемь графиков в 3D-виде.
Вот некоторые наблюдения из скриншота выше:
- Диаграммы
line
,spline
,area
,column
иbar
хорошо отображаются в 3D-виде. areaspline
не поворачивает вид, так как тип 3D официально не поддерживается.- Диаграмма
pie
работает, но три круга, складывающиеся друг на друга, выглядят неуклюже. Упрощение его до одного круга делает его более красивым:
series: [ { data: [2, 2, 1, 4, 3, 2], }, ]
- График
scatter
не отображается. Обычные варианты, которые мы использовали, не работают для графикаscatter
. Данные должны быть закодированы в формате[x, y, z]
. Кроме того, следует использовать типscatter3d
вместоscatter
. Вот фиксированная конфигурация:
const getOptions = (type) => ({ chart: { type: 'scatter3d', options3d: { enabled: true, alpha: 15, beta: 30, depth: 300, }, }, title: { text: _.startCase(`${type} chart`), }, yAxis: { title: { text: 'Values', }, }, series: [ { data: [[0, 2, 0], [1, 2, 0], [2, 1, 0], [3, 4, 0], [4, 3, 0], [5, 2, 0]], }, { data: [[0, 4, 100], [1, 3, 100], [2, 6, 100], [3, 5, 100], [4, 4, 100], [5, 6, 100]], }, { data: [[0, 5, 200], [1, 7, 200], [2, 7, 200], [3, 6, 200], [4, 7, 200], [5, 7, 200]], }, ], credits: { enabled: false, }, });
Затем появляется трехмерная точечная диаграмма:
На снимке экрана выше конечная метка xAxis
, 5
, перемешана с начальной меткой zAxis
, 0
. Два числа рядом друг с другом выглядят как 50
. Чтобы избежать путаницы, мы отключаем первую метку zAxis
, которая обозначает ось Z или ось глубины для трехмерных графиков.
zAxis: { showFirstLabel: false }
Теперь это выглядит лучше.
options3d
позиционирует диаграмму под хорошим углом. Однако было бы полезнее, если бы мы могли просматривать его под разными углами с помощью трехмерного вращения. Этого можно добиться с помощью щелчка и перетаскивания мышью или с помощью сенсорного экрана.
Вот модифицированный src/App.js
:
Выполните yarn start
, и мы увидим 3D точечную диаграмму, которую можно вращать:
Пример 4. Диаграммы интенсивности
Тепловая карта — это графическое представление данных, в котором отдельные значения, содержащиеся в матрице, представлены в виде цветов.
Для диаграммы тепловой карты необходимо импортировать модуль тепловой карты. Это может быть выполнено одной строкой кода:
require('highcharts/modules/heatmap')(Highcharts);
Или две строки:
import HighchartsHeatmap from 'highcharts/modules/heatmap'; HighchartsHeatmap(Highcharts);
xAxis.categories
определяется следующим образом:
xAxis: { categories: ['A', 'B', 'C', 'D', 'E', 'F'], }
yAxis.categories
определяется следующим образом:
yAxis: { categories: ['Apple', 'Banana', 'Pear'], }
Тогда data
представляет собой матрицу 6 x 3, где [x, y, z]
представляет значение z в точке [x, y]
:
data: [ [0, 0, 5], [0, 1, 8], [0, 2, 9], [1, 0, 3], [1, 1, 6], [1, 2, 2], [2, 0, 7], [2, 1, 1], [2, 2, 9], [3, 0, 4], [3, 1, 5], [3, 2, 1], [4, 0, 8], [4, 1, 6], [4, 2, 7], [5, 0, 7], [5, 1, 3], [5, 2, 4], ]
colorAxis
— это цветовая ось для серий. Визуально он выглядит как градиент или как отдельные элементы внутри легенды. Вот colorAxis
, который определяет градиент от '#FF0000'
(красный) до '#0000FF'
(синий).
colorAxis: { min: 0, minColor: '#FF0000', maxColor: '#0000FF', }
Это выглядит так:
Вот модифицированный src/App.js
:
- В строках 6 и 8 загружается модуль тепловой карты.
- В строке 13 добавьте
plotBorderWidth
для разделения областей тепловой карты. - В строках 18–20
xAxis
определяется с помощью 6categories
. - В строках 21–25
yAxis
определяется с помощью 3categories
.title
отключается (строка 23), аcategories
отображается в порядкеreversed
. - В строках 26–30
colorAxis
определяется как цвет градиента от белого (строка 28) к цвету первой серии (строка 29).colorAxis
заменяет метки серий по умолчанию. - В строках 31–45 определяется
data
, аdataLables
позволяет отображать значение тепловой карты в каждой области. - В строке 53 создается диаграмма тепловой карты.
Выполните yarn start
, и мы увидим диаграмму тепловой карты.
Пример 5: Древовидные диаграммы
Карта дерева — это графическое представление данных, в котором иерархические данные отображаются с помощью вложенных фигур, обычно прямоугольников.
Диаграмма карты дерева требует импорта модуля карты дерева. Это можно сделать одной строкой кода:
require('highcharts/modules/treemap')(Highcharts);
Или две строки:
import HighchartsTreemap from 'highcharts/modules/treemap'; HighchartsTreemap(Highcharts);
data
определяет иерархические отношения родитель-потомок вместе со значениями. Вот пример:
data: [ { id: 'parentId', name: 'Parent', color: '#FF0000', }, { name: 'child1', parent: 'parentId', value: 3, }, { name: 'child2', parent: 'parentId', value: 5, }, ]
Вот модифицированный src/App.js
:
- В строках 6 и 8 загружается модуль карты дерева.
- В строке 16 в
series
указаноtype
вместоchart
. - В строке 17
layoutAlgorithm
устанавливается на'sliceAndDice’
, что является поведением по умолчанию для разделения области на более мелкие части. - В строках 18–79
data
определяет иерархические данные, которые определяют трех родителей:Red
(строки 19–23),Green
(строки 24–28) иBlue
(строки 29–33). УRed
три ребенка (строки 34–48), уGreen
двое детей (строки 49–58), а уBlue
четверо детей (строки 59–78). - В строке 89 создается древовидная диаграмма.
Выполните yarn start
, и мы увидим древовидную диаграмму.
Измените layoutAlgorithm
на 'stripes’
, и мы увидим, что области разделены на полосы:
Измените layoutAlgorithm
на 'squarified’
или 'strip’
, и мы увидим, что области разделены на следующие фигуры:
Пример 6: калибровочные диаграммы
Калибровочная диаграмма также называется диаграммой спидометра или циферблатной диаграммой. На графике есть стрелка, указывающая на определенное значение над точкой разворота. Это эффективная визуализация для оценки производительности, отслеживания прогресса и облегчения принятия решений.
Для калибровочной диаграммы необходимо импортировать модуль highcharts-more
. Это можно сделать одной строкой кода:
require('highcharts/highcharts-more')(Highcharts);
Или две строки:
import HighchartsMore from 'highcharts/highcharts-more'; HighchartsMore(Highcharts);
Для калибровочной диаграммы yAxis
задает значения min
и max
, а series.data
определяет значение.
yAxis: { min: 0, max: 100, }, series: [ { data: [80], }, ]
Вот модифицированный src/App.js
:
- В строках 6 и 8 загружается
highcharts-more
. - В строках 17–23
yAxis
устанавливаетmin
иmax
на 0 и 100.yAxis.title.text
устанавливает на'Speed'
. - В строках 24–28 для
series.data
установлено значение 80. - В строке 36 создается калибровочная диаграмма.
Выполняем yarn start
, и мы видим калибровочную диаграмму.
Диаграмма датчика может быть определена для любой дуги с pane.startAngle
и pane.endAngle
. Если это не полный круг, pane.background
следует установить на null
. Также рекомендуется настроить центр на позицию [x, y]
.
pane: { startAngle: -90, endAngle: 89.9, background: null, center: ['50%', '70%'], }
Теперь мы видим половину калибра:
Мы можем стилизовать полосы датчика на основе значений yAxis
.
yAxis: { min: 0, max: 100, title: { text: 'Speed', }, plotBands: [ { from: 0, to: 25, color: '#FF0000', thickness: 15, }, { from: 25, to: 80, color: '#00FF00', thickness: 15, }, { from: 80, to: 100, color: '#0000FF', thickness: 15, }, ], }
Приведенный выше код определяет красную полосу для значений 0–25, зеленую полосу для значений 25–80 и синюю полосу для значений 80–100.
Кажется, что точка разворота находится слишком близко к числу.
Изменяем размер бэнда до размера 120%:
pane: { startAngle: -90, endAngle: 89.9, background: null, center: ['50%', '70%'], size: '120%', }
Эта диаграмма выглядит красивее.
Пример 7: Доступность диаграммы
Выполняем примеры графиков, и видим в консоли следующее предупреждение.
highcharts.src.js:223
Предупреждение Highcharts: рассмотрите возможность включения модуля accessibility.js, чтобы сделать вашу диаграмму более удобной для людей с ограниченными возможностями. Установите для параметра accessibility.enabled значение false, чтобы удалить это предупреждение. См. https://www.highcharts.com/docs/accessibility/accessibility-module.
Осмотрите элементы диаграммы, и мы не увидим никакой информации о специальных возможностях.
Доступность делает веб-приложения пригодными для использования людьми, чьи возможности каким-то образом ограничены, например, зрение (с помощью программы чтения с экрана) и мобильность (используя только клавиатуру). Кроме того, ограничения могут исходить из возможностей устройства, например мобильных устройств. Очень важно сделать корпоративное программное обеспечение доступным.
Модуль специальных возможностей можно импортировать одной строкой кода:
require('highcharts/modules/accessibility')(Highcharts);
Или две строки:
import HighchartsAccessibility from 'highcharts/modules/accessibility'; HighchartsAccessibility(Highcharts);
Просто импортировав этот модуль, диаграмма становится доступной. Кроме того, существует accessibility
параметр для настройки description
и других функций, таких как объявление новых данных пользователям программ чтения с экрана, настройка специальной навигации с помощью клавиатуры и т. д.
- В строках 7 и 10 загружается модуль специальных возможностей.
- В строках 19–22
accessibility
определяетdescription
.
Выполните yarn start
и перепроверьте элементы диаграммы.
На снимке экрана выше много информации о специальных возможностях, включая указанное нами описание специальных возможностей:
<div aria-hidden="false" style="position: absolute; width: 1px; height: 1px; overflow: hidden; white-space: nowrap; clip: rect(1px, 1px, 1px, 1px); margin-top: -3px; opacity: 0.01;"> <p>Gauge Chart</p> <div>Chart with 1 data point.</div> <div>The gauge chart shows the performance speed between 0 and 100.</div> <div>The chart has 1 Y axis displaying Speed. Data ranges from 80 to 80.</div> </div>
Если вы обратите немного внимания, то заметите, что каждая диаграмма представляет собой файл SVG.
Бонусный пример: нарисуйте линию полной ширины по оси X
Мы приводим этот бонусный пример, так как вы можете столкнуться с этой проблемой при разработке продукта. Поместите эту простую линейную диаграмму в src/App.js
, где ряду lineWidth
присвоено значение 10 (строка 21):
Выполняем yarn start
, и мы видим линейный график.
Вы заметили, что синяя линия на оси X тоньше?
В Highcharts хорошо известна проблема, заключающаяся в том, что краевые линии обрезаются. Есть много форумов, на которых обсуждались подобные проблемы, например, этот. Мы можем принять решение из связанной статьи, чтобы установить для min
значение ниже 0.
yAxis: { title: { text: 'Values', }, min: -0.2, }
Выполните yarn start
, и мы увидим полностью отображенную линию на оси X:
Заключение
Мы показали семь примеров Highcharts в React, которые включают 12 типов диаграмм line
, spline
, area
, areaspline
, column
, bar
, pie
, scatter
, scatter3d
, heatmap
, treemap
и gauge
.
Мы также написали статьи о других типах Highcharts:
- В этой статье
bubble
,packedbubble
,streamgraph
иcylinder
. - В этой статье
sankeydiagram
,arcdiagram
,dependencywheel
иnetworkgraph
. - В этой статье:
parallelCoordinates
.
По умолчанию Highcharts предоставляет возможности построения диаграмм JavaScript корпоративного уровня. Если ваш бюджет позволяет, Highcharts настоятельно рекомендуется.
Спасибо за прочтение.
Want to Connect? If you are interested, check out my directory of web development articles.