2014-12-18 6 views
0

Используя плагин D3 Sankey, я обновляю диаграмму Sankey с новыми значениями (об изменении данных, передаче новых значений для узлов и ссылок, сохраняя их согласованными). Существуют ли функции, такие как d3.treemap's sticky для поддержки заказов на узлы и ссылки на странице? Если нет, есть ли подход к построению этого?D3 диаграмма sankey - обеспечить соответствие позиции узла

var sankey = d3.sankey() 
    .nodeWidth(15) 
    .nodePadding(10) 
    .size([width, height]); 
    .sticky(true) 

Я по образцу здесь: http://bost.ocks.org/mike/sankey/

ответ

1

Нет, нет. Если вы хотите погрузиться в макете, вот где вы хотите посмотреть:

function computeNodeDepths(iterations) { 
var nodesByBreadth = d3.nest() 
    .key(function(d) { return d.x; }) 
    .sortKeys(d3.ascending) 
    .entries(nodes) 
    .map(function(d) { return d.values; }); 

initializeNodeDepth(); 
... 

Обратите внимание, что sortKeys точек на d3.ascending. Вы хотите, чтобы это указывало на какое-то твердое значение, которое вам нужно было бы вычислить либо на первой итерации, либо при подготовке данных. Он будет по-прежнему регулироваться при запуске функции обнаружения столкновений, поэтому вы можете увидеть, что ваши узлы выведены из положения, но это даст вам лучший шанс сохранить некоторый контроль.

+0

Спасибо - любое представление о структуре функции, которую выполняет sortKeys? Я бы предположил, что функция (a, b) {return myOrder.indexOf (a) - myOrder.indexOf (b)} – mike

+1

Это часть d3.nest(), она выполняет функцию сортировки, например, вы отправляете в Array.sort() , что было бы похоже на функцию, которую вы описываете, но я не думаю, что это будет работать. Я рекомендую посмотреть в Array.sort(). – Elijah