Chart.js 2 был выпущен с новыми типами диаграмм и улучшенной расширяемостью. Простота использования — одна из ключевых особенностей этой библиотеки с открытым исходным кодом, и здесь мы посмотрим, как она сравнивается с d3.js при создании простой гистограммы.
Библиотека JavaScript Chart.js — это проект с открытым исходным кодом, созданный Ником Дауни в 2013 году. Теперь проект переместился из исходного репозитория GitHub Ника в один из собственных: github.com/chartjs/Chart.js, где в настоящее время он очень активен. .
После динамического запуска и проникновения в сцену визуализации JavaScript казалось, что проект Chart.js зашел в тупик, судя по низкому трафику или, лучше сказать, отсутствию коммитов в его репозитории GitHub.
Ситуация снова начала улучшаться примерно в июне 2015 года, с заметным всплеском активности фиксации на графике, причем наибольшая активность была отмечена в первом квартале 2016 года, что привело к выпуску версии 2.0.0-alpha.
Оглядываясь назад, можно сказать, что Chart.js версии 1.0 стал долгожданным дополнением к клубу библиотек визуализации JavaScript, где он выделился, отказавшись от самого популярного в то время стандарта SVG -vector drawing- для нового HTML Canvas-растрового рисунка. — один.
Тем не менее, Chart.js не имел расширенных возможностей фреймворка, такого как d3.js. Он был ограничен только шестью типами диаграмм — линейными, столбчатыми, радарными, круговыми, полярными и кольцевыми, но его простота использования и гибкость были двумя аспектами, которые преобладали и выделяли его среди остальных библиотек.
Версия 2.0, которая представляет собой капитальный ремонт, предлагает совершенно иное предложение. Он дополняет уже установленный аспект простоты использования и фокусируется на расширяемости. Он добавляет больше типов диаграмм, включая составные диаграммы с областями / столбиками и пузырьковыми диаграммами, а также возможность их смешивать.
Он также добавляет типы осей диаграммы времени и журнала и поддерживает несколько осей. Легенды теперь поддерживаются для всех типов диаграмм, они могут быть размещены в любом месте на холсте и по умолчанию поддерживают переключение видимости данных. Анимация — еще одна новая функция с переходами при изменении данных, обновлении цветов и добавлении наборов данных. Он также разработан, чтобы быть отзывчивым и готовым к работе с мобильными устройствами, с диаграммами, ярлыками и легендами, которые масштабируются для соответствия любому размеру экрана и поддерживает сенсорные события. Также есть анимация.
Версия 2.1.0 была выпущена на прошлой неделе и объявила о различных исправлениях ошибок, а также представила тип горизонтальных полос и возможность создавать плагины, которые вписываются в жизненный цикл диаграммы.
Говоря о расширяемости, плагины уже начали собираться, например, Chart.Zoom.js, плагин масштабирования и панорамирования, выпущенный всего несколько дней назад, и react-chartjs2, компонент React для Chart.js, выпущенный примерно и в те временные рамки.
Если этого было недостаточно, уже есть новый предложенный коммит для версии 2.1.1, который содержит одно или два исправления незначительных ошибок.
Как уже было сказано, простота использования и низкая кривая обучения — основные преимущества Chart.js перед альтернативными библиотеками, такими как d3.js. Это демонстрируется тем, насколько тривиально просто в Chart.js создать аналог простой гистограммы d3:
Chart.js: var myChart = new Chart (ctx, {
тип: ‘бар’,
данные: {
ярлыки: [«Красный», «Синий», «Желтый», «Зеленый», «Пурпурный», «Оранжевый»],
наборы данных: [{
label: ‘Кол-во голосов’,
данные: [12, 19, 3, 5, 2, 3]
}]
},
параметры: {
напольные весы: {
yAxes: [{
клещей: {
beginAtZero: true
}
}]
}
}
})
и d3.js:
var margin = {сверху: 20, справа: 20, снизу: 70, слева: 40},
width = 600 — margin.left — margin.right,
height = 300 — margin.top — margin.bottom;
// Разбираем дату / время
varparseDate = d3.time.format («% Y-% m»). parse;
var x = d3.scale.ordinal (). rangeRoundBands ([0, ширина], .05);
var y = d3.scale.linear (). range ([высота, 0]);
var xAxis = d3.svg.axis ()
.scale (x)
.orient («низ»)
.tickFormat (d3.time.format («% Y-% m»));
var yAxis = d3.svg.axis ()
.scale (y)
.orient («слева»)
.ticks (10);
var svg = d3.select («body»). append («svg»)
.attr («ширина», ширина + поле слева + поле справа)
.attr («высота», высота + margin.top + margin.bottom)
.append («г»)
.attr («преобразовать»,
«translate (» + margin.left + «,» + margin.top + «)»);
d3.csv («bar-data.csv», function (error, data) {
data.forEach (function (d) {
d.date = parseDate (d.date);
d.value = + d.value;
});
x.domain (data.map (функция (d) {return d.date;}));
y.domain ([0, d3.max (данные, функция (d) {return d.value;})]);
svg.append («г»)
.attr («класс», «ось x»)
.attr («преобразовать», «перевести (0,» + высота + «)»)
.call (xAxis)
.selectAll («текст»)
.style («текст-якорь», «конец»)
.attr («dx», «-.8em»)
.attr («dy», «-.55em»)
.attr («преобразовать», «повернуть (-90)»);
svg.append («г»)
.attr («класс», «ось y»)
.call (ось y)
.append («текст»)
.attr («преобразовать», «повернуть (-90)»)
.attr («у»; 6)
.attr («dy», «.71em»)
.style («текст-якорь», «конец»)
.text («Значение ($)»);
svg.selectAll («полоса»)
.data (данные)
.enter (). append («прямоугольник»)
.style («заливка», «стальной синий»)
.attr («x», функция (d) {return x (d.date);})
.attr («ширина», x.rangeBand ())
.attr («y», функция (d) {return y (d.value);})
.attr («высота», функция (d) {высота возврата — y (d.value);});
});
С другой стороны, возможности d3.js для расширенной визуализации данных позволяют ему выполнять что-то вроде OMG Particles II, поэтому всегда используйте правильный инструмент для правильной работы.
Больше примеров, которые помогут вам начать работу с Chart.js, можно найти в его основном репозитории на GitHub, и пока вы там, обязательно взгляните на более сложный пример, например, на диаграмму разброса.