Javascript 当根节点被传递给d3树映射布局时,它是否被缓存?
我试着用d3树形图来制作动画,结果是Javascript 当根节点被传递给d3树映射布局时,它是否被缓存?,javascript,d3.js,treemap,Javascript,D3.js,Treemap,我试着用d3树形图来制作动画,结果是 App.svg = d3.select("#medals-tree-map").append("svg:svg") .style("width", App.canvasWidth) .style("height", App.canvasHeight) .append("svg:g") .attr("transform", "translate(-.5,-.5)") .attr("id", "container"); Ap
App.svg = d3.select("#medals-tree-map").append("svg:svg")
.style("width", App.canvasWidth)
.style("height", App.canvasHeight)
.append("svg:g")
.attr("transform", "translate(-.5,-.5)")
.attr("id", "container");
App.treemap = d3.layout.treemap()
.size([App.canvasWidth + 1, App.canvasHeight + 1])
.value(function(d) { return d.number; })
.sticky(true);
function drawGraphFromJson(data) {
// Draw the graph
var leaves = App.treemap(data);
var cell = App.svg.selectAll("g.cell")
.data(leaves);
// More rendering code
}
根据这一回答:
但是,当我使用新数据调用drawGraphFromJson
时,树映射根本没有改变
我通过在drawGraphFromJson
ie中定义App.treemap
解决了这个问题
function drawGraphFromJson(data) {
App.treemap = d3.layout.treemap()
.size([App.canvasWidth + 1, App.canvasHeight + 1])
.value(function(d) { return d.number; })
.sticky(true);
// Draw the graph
var leaves = App.treemap(data);
var cell = App.svg.selectAll("g.cell")
.data(leaves);
// More rendering code
}
我为什么要这样做?传入根节点时,
treemap
是否缓存?是的,如果设置treemap.sticky(true)
,布局将部分缓存。有关详细信息,请参阅文档
treemap.sticky的期望是使用相同的根节点作为布局的输入,但更改value函数以改变子节点的大小。有关使用粘性树形图布局更改值函数的示例,请参见D3网站上的。此约束的原因是,对于粘性布局,树的拓扑结构无法更改。必须在同一层次结构中具有相同数量的节点。唯一改变的是价值
因此,如果使用两组不同的数据调用drawGraphFromJson
,则需要设置treemap.sticky(false)
,或者需要将两个数据集合并到一个层次结构中,然后更改值函数以在这两个数据集之间设置动画
另外:您还没有包含渲染代码,因此数据连接中可能存在错误。然而,我认为这种难以理解的解释更有可能。请参阅以获取解释。Ah,这正是
sticky
标志。谢谢Awesome framework btw=)将sticky
从true
更改为false
是否也会更改相同绘制节点的位置(我正在使用.mode(“切片骰子”)
?