新しいデータをバインドするだけで、いくつかのD3.js要素を更新する方法を検討しようとしています。私は実際にこれが可能かどうかはわかりませんが、そうすべきだと感じています。新しいデータをバインドして要素を操作する
だから最初に私は4つの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
礼儀正しい答え。 [selection.call](https://github.com/mbostock/d3/wiki/Selections#wiki-call)と互換性のある方法で 'redraw'関数を書くこともできます。関連性:[再利用可能な図表へ](http://bost.ocks.org/mike/chart/)。 – mbostock
@mbostockああ、それはとても役に立ちます。以前は '.call() 'を見たことがなかった。私はできるだけ早くD3.js初心者です。私はその情報を含めるように編集します(そしてすべての可能性を私の頭の中に試してみるためにドキュメントを完全に通過させます)。 – Phrogz