Визуализация данных с помощью D3.js

Опубликовано: 15 марта 2023Автор: Алексей ПетровКатегория: Библиотеки

D3.js (Data-Driven Documents) — это мощная JavaScript-библиотека для создания интерактивной визуализации данных в веб-браузере. С помощью D3 разработчики могут превращать сырые данные в динамические диаграммы, графики и карты, которые помогают пользователям лучше понимать сложные наборы данных.

Основные возможности D3.js

Библиотека предлагает широкий спектр функций для работы с данными:

Пример: создание столбчатой диаграммы

Рассмотрим процесс создания простой столбчатой диаграммы шаг за шагом.

1. Подготовка данных

const dataset = [
  { label: 'Январь', value: 120 },
  { label: 'Февраль', value: 200 },
  { label: 'Март', value: 150 },
  { label: 'Апрель', value: 180 },
  { label: 'Май', value: 90 }
];

2. Создание SVG-контейнера

const svg = d3.select('#chart')
  .append('svg')
  .attr('width', 600)
  .attr('height', 400);

3. Масштабирование данных

const yScale = d3.scaleLinear()
  .domain([0, d3.max(dataset, d => d.value)])
  .range([0, 300]);

const xScale = d3.scaleBand()
  .domain(dataset.map(d => d.label))
  .range([0, 500])
  .padding(0.2);

4. Рендеринг столбцов

svg.selectAll('rect')
  .data(dataset)
  .enter()
  .append('rect')
  .attr('x', d => xScale(d.label))
  .attr('y', d => 400 - yScale(d.value))
  .attr('width', xScale.bandwidth())
  .attr('height', d => yScale(d.value))
  .attr('fill', '#2563eb');

Результат:

120 Янв
200 Фев
150 Мар
180 Апр
90 Май

Простая столбчатая диаграмма, созданная с помощью D3.js

Продвинутые техники

Интерактивность

D3 позволяет легко добавлять интерактивные элементы:

bars.on('mouseover', function(event, d) {
  d3.select(this)
    .transition()
    .duration(200)
    .attr('fill', '#1e40af');
})
.on('mouseout', function() {
  d3.select(this)
    .transition()
    .duration(200)
    .attr('fill', '#2563eb');
});

Анимации переходов

Плавное обновление данных при изменении:

bars.transition()
  .duration(800)
  .attr('y', d => 400 - yScale(d.value))
  .attr('height', d => yScale(d.value));

Лучшие практики

D3.js остается одним из самых мощных инструментов для визуализации данных в вебе. Его кривая обучения достаточно крутая, но результаты стоят потраченных усилий. Для старта рекомендую изучить официальные примеры и постепенно переходить к созданию собственных визуализаций.

← Назад к статьям