2016-12-04 4 views

ответ

3

Эта линия может быть лучше понята, если разбить его и создать какой-то новый переменные, чтобы показать, что происходит.

Во-первых, мы определяем генератор стека с аксессору ключами:

var stack = d3.stack() 
    .keys(data.columns.slice(1)); 

Затем мы стек данные (data здесь соответствует data в вашем вопросе, что данные штабелирования):

var stackedData = stack(data) 
//data being stacked-----^ 

И мы, наконец, связать данные:

g.selectAll(".serie") 
    .data(stackedData); 

Таким образом, то, что вы назвали третьими цифрами - это просто данные, которые будут сложены. Проблема заключается в том, в коде Бостока, вместо определения ключей сбруи в переменном стеке генератора, как я сделал, и определение сложенных данных в качестве нового переменного ...

var stack = d3.stack() 
    .keys(data.columns.slice(1)); 
var stackedData = stack(data); 

... он делает все, что в в одном из этапов, внутри функции data(), которая имеет такой же эффект:

.data(stack.keys(data.columns.slice(1))(data)) 
//   ^---keys accessor   ^----data being stacked 
+0

спасибо. На данный момент я, вероятно, промежуточный кодер, и некоторые из этих вещей d3 кажутся мне черной магией. это первый раз, когда я видел функцию и переменную рядом друг с другом без запятой, это обычное явление? – eatkimchi

+0

Извините, но где вы видите функцию и переменную рядом друг с другом? –

+0

.data (stack.keys (data.columns.slice (1)) * no comma * (data)) – eatkimchi