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)