悲しいことに、ビルによって掲示ソリューションは、半分だけのトリックをした:それは確かにパンを阻害しないが、それはズームが適用された場合に歪ませるグラフの原因となります。それでは、通常、適切に均等に配置されたグラフに戻ることは不可能です。
次のバージョンでは、スクロールしても軸の比率は維持されます。
スケーリングが100%に達すると、スケールのドメインは元の位置にリセットされます。これにより、中間ステップが軸の不正なパラメータを返す場合でも、正確な位置決めが保証されます。
完全ではありませんが、私はこのスクリプトがd3(再)がこの機能を実装するまで誰かを助けてくれることを願っています。
# x and y are the scales
# xAxis and yAxis are the axes
# graph is the graph you want attach the zoom to
x0 = x.copy()
y0 = y.copy()
successfulTranslate = [0, 0]
zoomer = d3.behavior.zoom()
.scaleExtent([1,2])
onZoom = ->
ev = d3.event # contains: .translate[x,y], .scale
if ev.scale == 1.0
x.domain x0.domain()
y.domain y0.domain()
successfulTranslate = [0, 0]
else
xTrans = x0.range().map((xVal) -> (xVal-ev.translate[0])/ev.scale).map(x0.invert)
yTrans = y0.range().map((yVal) -> (yVal-ev.translate[1])/ev.scale).map(y0.invert)
xTransOk = xTrans[0] >= x0.domain()[0] and xTrans[1] <= x0.domain()[1]
yTransOk = yTrans[0] >= y0.domain()[0] and yTrans[1] <= y0.domain()[1]
if xTransOk
x.domain xTrans
successfulTranslate[0] = ev.translate[0]
if yTransOk
y.domain yTrans
successfulTranslate[1] = ev.translate[1]
zoomer.translate successfulTranslate
graph.select('g.x.axis').call(xAxis)
graph.select('g.y.axis').call(yAxis)
drawBars()
zoomer.on('zoom', onZoom)
# ...
graph.call(zoomer)
この投稿は古いですが、FYI:あなたが参照するリンクはズームアウトして自分の心のコンテンツにパンさせることができます。 (Chrome 29.0) – SgtPooki
あなたのコードは自分のグラフで動作します。乾杯。 – SgtPooki
この例を使用して、パンニング中にグラフがズームします。 –