Разработчики) | Майк Босток , Джейсон Дэвис, Джеффри Хир , Вадим Огиевецкий и сообщество |
---|---|
Первый выпуск | 18 февраля 2011 г . |
Стабильный выпуск | 7.0.0 / 7 июня 2021 г . [1] |
Репозиторий | |
Написано в | JavaScript |
Тип | Визуализация данных , библиотека JavaScript |
Лицензия | BSD |
Веб-сайт | d3js |
D3.js (также известный как D3 , сокращение от Data-Driven Documents ) - это библиотека JavaScript для создания динамических интерактивных визуализаций данных в веб-браузерах . Он использует стандарты масштабируемой векторной графики (SVG), HTML5 и каскадных таблиц стилей (CSS). Это преемник более ранней структуры Protovis. [2] Его разработка была отмечена в 2011 году [3], так как версия 2.0.0 была выпущена в августе 2011 года. [4]
Ранее предпринимались различные попытки перенести визуализацию данных в веб-браузеры. Наиболее яркими примерами были наборы инструментов Prefuse, Flare и Protovis, которые можно рассматривать как прямых предшественников D3.js.
Prefuse - это набор инструментов визуализации, созданный в 2005 году, который требует использования Java , а визуализации визуализируются в браузерах с помощью подключаемого модуля Java. Flare был аналогичным набором инструментов 2007 года, который использовал ActionScript и требовал подключаемого модуля Flash для рендеринга.
В 2009 году, основываясь на опыте разработки и использования Prefuse и Flare, Джеффри Хир , Майк Босток и Вадим Огиевецкий из Стэнфордской группы визуализации Стэнфордского университета создали Protovis, библиотеку JavaScript для генерации SVG-графики из данных. Библиотека была известна практикам в области визуализации данных и ученым. [5]
В 2011 году разработка Protovis была остановлена, чтобы сосредоточиться на новом проекте D3.js. Основываясь на опыте работы с Protovis, Bostock вместе с Хиром и Огиевецким разработали D3.js, чтобы обеспечить более выразительную структуру, которая, в то же время, ориентирована на веб-стандарты и обеспечивает улучшенную производительность. [6]
Библиотека D3.js использует встроенные функции для выбора элементов, создания объектов SVG, их стиля или добавления к ним переходов, динамических эффектов или всплывающих подсказок . Эти объекты также можно стилизовать с помощью CSS. Большие наборы данных можно привязать к объектам SVG с помощью функций D3.js для создания текстовых / графических диаграмм и диаграмм. Данные могут быть в различных форматах, таких как JSON , значения, разделенные запятыми (CSV) или geoJSON , но, при необходимости, функции JavaScript могут быть написаны для чтения других форматов данных.
Центральный принцип дизайна D3.js состоит в том, чтобы позволить программисту сначала использовать селектор в стиле CSS для выбора заданного набора узлов объектной модели документа (DOM), а затем использовать операторы для управления ими аналогично jQuery . [7] Например, можно выделить все <p>...</p>
элементы HTML , а затем изменить их цвет текста, например, на бледно-лиловый:
d3 . selectAll ( "p" ) // выбираем все элементы <p> . style ( "color" , "lavender" ) // установить стиль "color" в значение "lavender" . attr ( "class" , "squares" ) // установить для атрибута "class" значение "squares" . attr ( "х" , 50 ); // устанавливаем для атрибута "x" (горизонтальное положение) значение 50 пикселей
Выбор может быть основан на теге HTML, классе, идентификаторе, атрибуте или месте в иерархии. После того, как элементы выбраны, к ним можно применять операции. Сюда входит получение и установка атрибутов, отображаемых текстов и стилей (как в приведенном выше примере). Также можно добавлять и удалять элементы. Этот процесс изменения, создания и удаления HTML-элементов может зависеть от данных, что является основной концепцией D3.js.
Объявляя переход, значения атрибутов и стилей можно плавно интерполировать в течение определенного времени. Следующий код заставит все <p>...</p>
элементы HTML на странице постепенно изменить цвет текста на розовый:
d3 . selectAll ( "p" ) // выбираем все элементы <p> . transition ( "trans_1" ) // переход с именем "trans_1" . delay ( 0 ) // переход начинается через 0 мс после триггера . duration ( 500 ) // переход на 500 мс . легкость ( d3 . easeLinear ) // переход ослабления прогрессия линейна ... . стиль ( «цвет» , «розовый» ); // ... цвет: розовый
Для более продвинутого использования загруженные данные управляют созданием элементов. D3.js загружает заданный набор данных, а затем для каждого из его элементов создает объект SVG со связанными свойствами (форма, цвета, значения) и поведением (переходы, события). [8] [9] [10]
// Данные var countryData = [ { name : "Ирландия" , доход : 53000 , жизнь : 78 , население : 6378 , цвет : "черный" }, { name : "Норвегия" , доход : 73000 , жизнь : 87 , население : 5084 , цвет : "blue" }, { name : "Tanzania" , доход: 27000 , жизнь : 50 , поп : 3407 , цвет : "серый" } ]; // Создаем контейнер SVG var svg = d3 . select ( "# крючок" ). добавить ( "SVG" ) . attr ( "ширина" , 120 ) . attr ( "высота" , 120 ) . style ( "цвет фона" , "# D0D0D0" );// Создание элементов SVG из данных svg . selectAll ( "circle" ) // создаем шаблон виртуального круга . data ( countryData ) // привязываем данные . join ( "circle" ) // объединяет данные с выделенным фрагментом и создает элементы круга для каждой отдельной информации . attr ( "id" , function ( d ) { return d . name }) // установить идентификатор круга в соответствии с названием страны . attr ( "сх" , function ( d ) { return d . доход / 1000 }) // устанавливаем горизонтальное положение круга в соответствии с доходом . attr ( "cy" , function ( d ) { return d . life }) // установить вертикальное положение круга в соответствии с ожидаемой продолжительностью жизни . attr ( "r" , function ( d ) { return d . pop / 1000 * 2 }) // устанавливаем радиус круга в соответствии с населением страны . attr ( "заливка" , функция ( d ) { return d . color }); // устанавливаем цвет круга в соответствии с цветом страны
Сгенерированная графика SVG разработана в соответствии с предоставленными данными.
После того, как набор данных привязан к документу, использование D3.js обычно следует шаблону, в котором явная .enter()
функция, неявное «обновление» и явная .exit()
функция вызываются для каждого элемента в связанном наборе данных. Любые методы, связанные после .enter()
команды, будут вызываться для каждого элемента в наборе данных, который еще не представлен узлом DOM в выборке (предыдущий selectAll()
). Аналогичным образом функция неявного обновления вызывается для всех существующих выбранных узлов, для которых есть соответствующий элемент в наборе данных, и .exit()
вызывается для всех существующих выбранных узлов, которые не имеют элемента в наборе данных для привязки к ним. В документации D3.js есть несколько примеров того, как это работает. [11]
D3.js API содержит несколько сотен функций, и их можно сгруппировать в следующие логические единицы: [12]
Операции с массивами D3.js созданы для дополнения существующей поддержки массивов в JavaScript (методы мутатора: sort, reverse, splice, shift и unshift; методы доступа: concat, join, slice, indexOf и lastIndexOf; методы итерации: filter, every, forEach, map, some, reduce и reduceRight). D3.js расширяет эту функциональность за счет:
Викискладе есть медиафайлы по теме D3.js . |