在d3 sankey图中重新计算dy

时间:2016-06-08 23:18:56

标签: javascript d3.js

链接的stroke-width和节点的height基于dy。我猜测初始dy值是在初始化时计算的,是data.links.value的函数。

这是我对象的结构。

graph = {"nodes" : [], "links" : []};
data.links.forEach(function (d) {
graph.nodes.push({ "name": d.source});
graph.nodes.push({ "name": d.target});
graph.links.push({ "source": d.source,
    "target": d.target,
    "value": +d.value,
    "unique": +d.unique,
    "sameday": +d.sameday,
    "sourceNpi": d.sourceNpi,
    "targetNpi": d.targetNpi,
    "sourceName": d.sourceName,
    "targetName": d.targetName,
    "npiname": d.npiname});
});

在某些用户事件中,我想切换使用value来计算dy到samedayunique

在我的事件处理程序中,我正在做:

// set d.value to d.unique
graph.links.map(function(d){
    d.value = +d.unique; 
});

link.data(graph.links, function(d){
        return d.sourceNpi + d.targetNpi;
    })
    .enter().append("path")
    .attr("d", path);
sankey.relayout();
link
    .transition()
    .duration(750)
    .attr("class", "link")
    .style("stroke-width", function(d) {return d.dy; });

var rectTransition = d3.selectAll(".node > rect")
    .data(graph.nodes, function(d){
        return d.name;
    })
    .transition();
rectTransition
    .attr("height", function(d) { return d.dy; })
    .duration(750);

我希望使用dy代替unique重新计算value,但它与重新计算前的值相同。当我致电.data()时,数据是否未重新初始化?有没有办法重新计算dy

0 个答案:

没有答案