Javascript 在d3 sankey图中重新计算dy

Javascript 在d3 sankey图中重新计算dy,javascript,d3.js,Javascript,D3.js,链接的笔划宽度和节点的高度基于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.s

链接的
笔划宽度
和节点的
高度
基于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切换到
sameday
unique

在我的事件处理程序中,我正在执行以下操作:

// 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);

我希望使用
unique
而不是
value
重新计算
dy
,但它的值与重新计算之前的值相同。调用
.data()
时,数据是否未重新初始化?是否有重新计算
dy
的方法?

作为一种解决方法,我正在计算多个
graph
对象,当我准备好
.transition()
时,我将从一个可选值调用计算
dy
的新数据。而且,我错了
dy
不是根据
.data()
计算的;相反,它是在
sankey.nodes(nodes).links(links).layout(32)
期间计算的,更具体地说,我认为是
.layout
方法。作为一种解决方法,我正在计算多个
图形
对象,当我准备好
.transition()
时,我将调用新数据,从一个可选值计算
dy
。而且,我错了
dy
不是根据
.data()
计算的;相反,它是在
sankey.nodes(nodes).links(links).layout(32)
期间计算的,更具体地说,我认为是
.layout
方法。