Обновление layout.pack в d3.js

Я пытаюсь сосредоточиться на макете пакета d3 (http://bl.ocks.org/4063530).

У меня работает базовый макет, но я бы хотел обновить его новыми данными. т.е. собирать новые данные, связывать их с текущим layout.pack и обновлять соответственно (update / exit / enter).

Мои попытки здесь (http://jsfiddle.net/emepyc/n4xk8/14/):

var bPack = function(vis) {
    var pack = d3.layout.pack()
    .size([400,400])
    .value(function(d) {return d.time});

    var node = vis.data([data])
    .selectAll("g.node")
    .data(pack.nodes)
    .enter()
    .append("g")
    .attr("class", function(d) { return d.children ? "node" : "leaf node"; })
    .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });

node.append("circle")
    .attr("r", function(d) { return d.r });

    node.filter(function(d) { return !d.children; }).append("text")
    .attr("text-anchor", "middle")
    .attr("dy", ".3em")
    .text(function(d) { return d.analysis_id });

    bPack.update = function(new_data) {
        console.log("UPDATE");

        node
        .data([new_data])
        .selectAll("g.node")
        .data(pack.nodes);

        node
        .transition()
        .duration(1000)
        .attr("class", function(d) { return d.children ? "node" : "leaf node" })
    .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")" });

        node.selectAll("circle")
        .data(new_data)
        .transition()
    .duration(1000)
    .attr("r", function(d) { return d.r; });

    };

Конкретные вопросы ...

Как мне связать данные? (поскольку данные не сложная структура и не массив данных)

Как можно добавить новые узлы / листья в макет? А старые убрали?

Указатели на рабочий пример будут с благодарностью.

Ответы на вопрос(3)

Ваш ответ на вопрос