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
方法。