Ich versuche, mich um d3 Pack Layout (http://bl.ocks.org/4063530).Aktualisieren eines Layout.Pack in d3.js
Ich habe das grundlegende Layout funktioniert, aber ich möchte es mit neuen Daten aktualisieren. d. h. neue Daten sammeln, an das aktuelle layout.pack binden und entsprechend aktualisieren (update/exit/enter).
sind Meine Versuche, hier (http://jsfiddle.net/emepyc/n4xk8/14/):
var bPack = function(vis) {
var pack = d3.layout.pack()
.size([400,400])
.value(function(d) {return d.time});
var node = vis.data([data])
.selectAll("g.node")
.data(pack.nodes)
.enter()
.append("g")
.attr("class", function(d) { return d.children ? "node" : "leaf node"; })
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
node.append("circle")
.attr("r", function(d) { return d.r });
node.filter(function(d) { return !d.children; }).append("text")
.attr("text-anchor", "middle")
.attr("dy", ".3em")
.text(function(d) { return d.analysis_id });
bPack.update = function(new_data) {
console.log("UPDATE");
node
.data([new_data])
.selectAll("g.node")
.data(pack.nodes);
node
.transition()
.duration(1000)
.attr("class", function(d) { return d.children ? "node" : "leaf node" })
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")" });
node.selectAll("circle")
.data(new_data)
.transition()
.duration(1000)
.attr("r", function(d) { return d.r; });
};
Spezifische Fragen ...
Wie binde ich die Daten? (Da die Daten keine komplexe Struktur und kein Array von Daten sind)
Wie können neue Knoten/Blätter zum Layout hinzugefügt werden? Und alte entfernt?
Zeiger zu einem Arbeitsbeispiel würden sehr geschätzt werden.
Ich weiß, dass es eine Weile her ist, seit Sie die Frage gestellt haben, aber könnten Sie vielleicht meine Lösung überprüfen? Ich bin neugierig, ob es die richtige Antwort für Ihre Dilemmata ist. Und vielleicht sind andere daran interessiert, wie Ihre Frage gelöst wird, wenn sie gelöst ist ... :) – VividD
Ja, die Antwort ist, das Pack-Layout die ganze Arbeit für Sie erledigen zu lassen. Dies war nicht offensichtlich, als ich anfing, daran zu arbeiten, aber ich fand die Lösung in einem anderen Beispiel (Aktualisierung eines Baumlayouts). Danke für das Arbeitsbeispiel. – emepyc
Froh, dass Sie das Problem gelöst haben. Es ist oft der Fall, dass die endgültige Lösung einfach ist, aber nicht offensichtlich, wenn Sie das Problem zuerst angehen. Ich mag diese Fälle sehr. – VividD