我不知道你是怎麼做的變焦,但我猜你正在改變你與你的軸使用尺度的參數?您應該可以使用相同的比例放置矩形。
如果您從繪圖座標開始,那麼可能在刻度上使用反轉函數將有助於(至少可用於定量刻度),例如, https://github.com/mbostock/d3/wiki/Quantitative-Scales#wiki-linear_invert
您應該能夠獲取初始繪圖座標並將其反轉以確定數據座標,然後可以隨着刻度的變化移動。
如果標尺是線性的,你或許可以顛倒的長度和寬度太大,但是你必須計算偏移,如果您的域名不包括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(如函數)的軸是基於規模。
我使用D3.js(http://mbostock.github.com/d3/talk/20111018/area-gradient.html)中的平移和縮放示例,並稍微修改了翻譯。我希望有一種方法可以使用軸座標繪製矩形,而不是繪圖區域的絕對(x,y)。 – Alex
如果您有非絕對(即數據)座標,編輯它可以顯示如何從刻度中指定直尺位置。這是你的意思嗎? – Superboggly
完美!幾乎正是我想要的,除了在計算盒子的寬度時不需要反轉。否則,當我放大時,它會變得更小,當我縮小時會變得更大。我會將更改添加到答案中,非常感謝! – Alex