Диаграмма Санки D3 - принудительное положение узла

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

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

Здесь я следую шаблону: http://bost.ocks.org/mike/sankey/


person mike    schedule 18.12.2014    source источник


Ответы (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. Вы бы хотели, чтобы это указывало на какое-то зашитое значение, которое вам нужно будет вычислить либо на первой итерации, либо при подготовке данных. Он по-прежнему будет настраиваться при запуске функции обнаружения столкновений, поэтому вы можете увидеть, что ваши узлы вытеснены из положения, но это даст вам лучший шанс сохранить некоторый контроль.

person Elijah    schedule 19.12.2014
comment
Спасибо - есть идеи о структуре функции, которую выполняет sortKeys? Я бы предположил, что function (a, b) {return myOrder.indexOf (a) - myOrder.indexOf (b)} - person mike; 19.12.2014
comment
Это часть d3.nest (), для нее требуется функция сортировки, которую вы бы отправили в Array.sort (), которая будет чем-то вроде функции, которую вы описываете, но я не думаю, что эта конкретная функция будет работать. Я бы порекомендовал заглянуть в Array.sort (). - person Elijah; 19.12.2014