zlo*_*log 4 javascript treemap d3.js
我试图让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
}
Run Code Online (Sandbox Code Playgroud)
根据这个答案:https://stackoverflow.com/a/9650825/111884
但是,当我drawGraphFromJson使用新数据调用时,树图完全没有变化.
我通过定义ie App.treemap内部来解决问题drawGraphFromJson
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
}
Run Code Online (Sandbox Code Playgroud)
为什么我需要这样做?treemap传入根节点时是否会缓存?
mbo*_*ock 11
是的,如果设置,则部分缓存布局treemap.sticky(true).请参阅treemap.sticky的文档.
treemap.sticky的期望是您使用相同的根节点作为布局的输入,但您更改值函数以更改子节点的大小.有关使用粘性树图布局更改值函数的示例,请参阅D3网站上的树形图可视化.这种约束的原因是,使用粘性布局时,树的拓扑结构不能更改 - 您必须在同一层次结构中具有相同数量的节点.唯一改变的是价值.
因此,如果您drawGraphFromJson使用两组不同的数据进行调用,则需要设置treemap.sticky(false),或者需要将两个数据集合并为一个层次结构,然后将值函数更改为两者之间的动画.
另外:您还没有包含渲染代码,因此您的数据连接可能会出错.但是,我认为更有可能采用粘性解释.有关解释,请参阅思考连接.
| 归档时间: |
|
| 查看次数: |
4872 次 |
| 最近记录: |