D3js: когда использовать.datum () and.data ()?
Я часто вижу .datum
при использовании диаграммы областей. Например:
svg = d3.select("#viz").append("svg").datum(data)
есть ли какие-либо эмпирические правила для when - это?
var area = d3.svg.area()
.x(function(d) { return x(d.x); })
.y0(height)
.y1(function(d) { return y(d.y); });
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
svg.append("path")
.datum(data)
.attr("d", area);
3 ответов
Я думаю, что документация дает хороший ответ на этот вопрос: https://github.com/mbostock/d3/wiki/Selections#wiki-datum.
в основном, дело в том, что в некоторых случаях вы не заинтересованы в входа/выхода наборов, когда вы делаете выбор. Если это так, что часто бывает для полной диаграммы, вы используете datum.
обновление: это зависит: когда вы не ожидаете динамических обновлений, что, похоже, имеет место в вашем данном например, datum в порядке. Почему? Поскольку нет элемента пути svg, есть только один элемент пути, и после его добавления он не изменится.
Если у вас есть несколько элементов пути и динамические изменения (например, после каждой секунды удаляется самый старый элемент данных и добавляется новый), чем вы будет нужны данные. Это даст вам три набора: наборы графических элементов, для которых больше нет данных, набор элементов, для которых данные обновлено и набор элементов, для которых ранее не существовало элемента данных (соответственно, наборы ввода, обновления и выхода). Как только вам это понадобится, я предлагаю вам прочитать документацию d3.
очевидно, вычисление этих трех наборов не обходится без затрат. На практике это должно стать проблемой только при работе с" большими " (я думаю, что D3 масштабируется до 10 тысяч элементов) наборами данных.
очень хороший учебник с примерами здесь. http://bost.ocks.org/mike/selection/#data
другие, связанные с учебник, но я думаю ссылка API на выбор.datum дает принятый ответ:
получает или задает привязку данных для каждого выбранного элемента. В отличие от выбор.метод данных, этот метод не вычисляет соединение (и таким образом не вычисляет параметры ввода и выхода).
поскольку он не вычисляет соединение, ему не нужно знать ключевую функцию. Следовательно, обратите внимание на разницу в подписи между ними, только data
функция принимает ключевую функцию
- выбор.датум([значение])
- выбор.данных([значения [Ключи]])
Я думаю, что учебник для data
дает другое более основное различие, аналогичное значению слов "данные"и " данное". То есть первое-множественное число, второе-единственное. Таким образом, данные могут быть объединены в две пути:
присоединен к группы элементов по выбору.данные.
назначена отдельные элементы через выбор.данная величина.
@Hugolpz' суть дает хорошие примеры значимости "групп" против "отдельных лиц". Вот,json
представляет массив данных. Обратите внимание, как datum
связывает весь массив с одним элементом. если мы хотим достичь того же с data
мы должны сначала поместите json в другой массив.
- var chart = d3.выберите("тело").добавление ("svg").data ([json])
- var chart = d3.выберите("тело").добавление ("svg").datum (json)