ズームをどのように行っているのかわかりませんが、軸で使用するスケールのパラメーターを変更していると思いますか? 同じスケールを使用して長方形を配置できるはずです。
プロット座標から開始する場合は、スケールで反転関数を使用すると役立つ場合があります (少なくとも量的スケールで使用できます) 。
最初のプロット座標を取得し、それらを反転して、スケールの変更に合わせて移動できるデータ座標を決定できる必要があります。
スケールが線形の場合、おそらく長さと幅も逆にすることができますが、ドメインに 0 が含まれていない場合はオフセットを計算する必要があります。最も簡単なのは、次のような長方形の端点を計算することです。
var dataX0 = xScale.invert(rect.x);
var dataX1 = xScale.invert(rect.x + rect.width);
var dataWidth = dataX1 - dataX0;
軸座標のデータが既にある場合は、次のようなことができるはずです。
var rectData = [{x: 'April 1, 1999', y: 10000, width: 100, height:100}];
svg.selectAll('rect.boxy')
.data(rectData)
.enter().append('rect').classed('boxy', true)
.style('fill','black');
svg.selectAll('rect.boxy')
.attr('x', function(d) { return x(new Date(d.x));} )
.attr('y', function(d) { return y(d.y);})
.attr('width', function(d) { return d.width;} )
.attr('height', function(d) { return d.height;} );
あなたが共有した例に基づいて、 x と y (関数として) は、軸が基づいているスケールです。