我正試圖解決如何通過綁定新數據來更新一些D3.js元素。我不確定這是否可行,但感覺應該是這樣。通過綁定新數據來操作元素
所以首先我已經創建了四個SVG圈,並設置cx
作爲數據的功能失調:
<body><div id="container"></div></body>
var svg = d3.select("div.container").append("svg")
.attr("class", "chart")
.attr("width", 1000)
.attr("height", 500);
// Create initial data and display
var data = [0, 10, 20, 30];
var circle = svg.selectAll("circle")
.data(data)
.enter()
.append('circle')
.attr("cx", function(d) {
return d*10;
})
.attr("cy", 100)
.attr("r", 10)
.style("fill", "steelblue");
接下來,我裝上新的數據和過渡。我希望看到的圓圈對面緩緩移動到新位置(這就是我想要實現),但他們不這樣做:
var data1 = [40, 50, 60, 70];
circle.data(data1).transition().duration(2500);
上午我做一個基本的錯誤?也許我有錯誤的選擇。或者僅僅通過操縱數據來更新元素是不可能的?
更新:如果我做console.log(circle)
然後我看到一個SVG圈元素的數組,這是我所期望的。
真棒回答,謝謝。我仍然試圖讓我的頭腦圍繞這些東西,但這將是一個真正的幫助! – Richard 2012-03-01 18:19:49
周到的答案。你也可以用與[selection.call](https://github.com/mbostock/d3/wiki/Selections#wiki-call)兼容的方式編寫'redraw'函數。相關:[邁向可重用圖表](http://bost.ocks.org/mike/chart/)。 – mbostock 2012-03-06 02:53:38
@mbostock哦,這非常有幫助;我以前沒見過'.call()'。我只是一名D3.js新手,幫助我在哪裏。我將編輯以包含該信息(並且全面通過文檔以嘗試將所有可能性放在我的頭上)。 – Phrogz 2012-03-06 03:22:13