私は D3 に慣れておらず、javascript は私の母国語ではないので、js のベスト プラクティスを使用していない可能性があることを事前にお詫びします。
データセットを循環するこの棒グラフを再作成して、毎回棒を追加しようとしています。しかし、D3 v4 になるように変更しようとしています。
https://bl.ocks.org/RandomEtc/cff3610e7dd47bef2d01
最後の棒グラフをプロットする以外は、ほとんど機能しています。x 軸にスポットを配置します。ただし、棒グラフは表示されません。
https://jsfiddle.net/jimdholland/07p8z8pb/35/
私が見る限り、反復関数は最後の要素とデータ値を取得しています。
function cycler(data) {
var slices = [];
for (var i = 0; i < data.length; i++) {
slices.push(data.slice(0, i+1));
} //End for loop
slices.forEach(function(slice, index){
setTimeout(function(){
drawChart(slice);
console.log(slice);
}, index * 300);
}); //End for Each
}; // End cycler function
グラフを描画する関数を作成しましたが、古いデータを適切に消去していない可能性があります。
function drawChart(data) {
x.domain(data.map(function(d) { return d.Word; }));
y.domain([0, d3.max(data, function(d) { return d.Positive; })]);
svg.select(".xAxis").transition().duration(300).call(d3.axisBottom(x));
svg.select(".yAxis").transition().duration(300).call(d3.axisLeft(y));
//svg.select('.xaxis').transition().duration(300).call(xAxis);
var bar = svg.selectAll("rect").data(data);
bar.exit()
.transition()
.duration(300)
.attr("y", innerHeight)
.attr("height", 0)
.style('fill-opacity', 1e-6)
.remove();
bar.enter().append("rect")
.attr("class", "bar")
.merge(bar)
.attr("y", innerHeight)
.attr("height", 0);
bar.transition().duration(300)
.attr("x", function(d) {return x(d.Word); })
.attr("width", x.bandwidth())
.attr("y", function(d) {return y(d.Positive); })
.attr("height", function(d) {return height - y(d.Positive); });
};
助けてくれてありがとう、そして私は D3 コードを書くためのより良い実践にも心を開いています。
cycler()
関数内でfor ループ<
を次のように変更するだけです。<=
for (var i = 0; i <= data.length; i++) {
slices.push(data.slice(0, i+1));
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加