2017-08-22 10 views
2

私はx軸に時間スケールを使ってd3v4チャートを持っています。すべて正常に動作していますが、ズームインすると停止しません。分スケールに達したときにズームを止める方法はありますか?d3.jsの時間スケールのズームを分に制限する方法は?

d3.scaleTime().range([0, width]) 
... 
var zoom = d3.zoom() 
     .scaleExtent([1, Infinity]) 
     .translateExtent([[0, 0], [width, height]]) 
     .extent([[0, 0], [width, height]]) 
     .on("zoom", zoomed); 

私はいくつかの番号にInfinityを変更した場合、ズームからそれを止めることができていますが、問題は、スケールの程度は規模が変化分に到達するために必要なので、スケールの大きさが毎回異なることです。

+0

あなたがそれを判断するために計算する変数で 'Infinity'を交換しない理由は? –

+0

それは私が考えていたものです。 .scaleExtent(['月'、 '分]) 'のようなものがあることを期待していました。それは助けになりました。 – Matt

答えて

0

scaleExtentを適切な値に設定するだけで済みます。 「規模の大きさが毎回異なっている」場合には、単に初期ドメインの値を使用してscaleExtentを設定します。

var domainStart = new Date('1/1/2017'), 
    domainEnd = new Date('2/1/2017'); 

var scale = d3.scaleTime() 
    .domain([domainStart, domainEnd]) 
    .range([0, width]) 

... 

// max zoom is the ratio of the initial domain extent to the minimum 
// unit that you want to zoom to (1 minute == 1000*60 milliseconds) 
var zoomMax = (domainEnd.getTime() - domainStart.getTime())/(1000*60), 
    zoomMin = 1; 

var zoom = d3.zoom() 
    .scaleExtent([zoomMin, zoomMax]) 
    .translateExtent([[0, 0], [width, height]]) 
    .extent([[0, 0], [width, height]]) 
    .on("zoom", zoomed); 
+0

これは近いです。私はたぶん問題を間違って説明しました。これは、1分がx軸を横切って伸びるので、分スケールにズームします。私が探しているのは、ズームインするときに、1分ごとにズームが停止するようにしたいということです。秒には進まないでください。だから、これはグラフ幅の関数でなければならないでしょう。 – Matt

関連する問題