Javascript 当根节点被传递给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

我试着用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");

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(“切片骰子”)