これは、私が現在直面している問題の JSFiddleです。
基本的に、いくつかのバーを描画するために使用するオブジェクトの配列があります。配列を並べ替えた後、それに応じてバーのy
位置を更新しようとしましたが、うまくいきません。
だから、これは私がバーを描くために使用するスケールです:
var yScale = d3.scale.ordinal()
.domain(d3.range(0, numberOfBars))
.rangeBands([0, numberOfBars * barHeight]);
したがって、3 つのバーがあり、バーの高さが 40 ピクセルの場合、0-3 => 0-120 ピクセルをマッピングしています。
y
次に、このスケールを使用して正しい位置を返す関数があります。
var y = function(d, i) {
return yScale(i);
};
このy
関数を使用してバーを描画した後、データ配列を並べ替えて、バーを再描画しようとします。
barsContainer.selectAll('.bar')
.data(chartData.users)
.transition()
.duration(750)
.delay(delay)
.attr('y', y); // Not working. I thought this would order the bars.
//.attr('y', 120); // This works though. It moves all the bars to this y.
これは私が困惑しているところです。配列 (chartData.users) を並べ替えたので、バーはデータと「結合」されているため、バーy
は配列内のデータの新しい位置に従って変更されるべきではありませんか?