2017-05-04 5 views
0

私はd3.jsが新しく、新しい日付に基づいて変更できる折れ線グラフを作成しようとしています。新しい日付に基づいてd3.extentを更新します。

私のデータは1985年から2015年にかけて、全範囲の折れ線グラフを作成してから、クリックすると特定の期間(2000年 - 2005年)にズームします。ズームインして日付の範囲(x軸)を変更することもできましたが、新しい日付のデータに基づいてy軸の範囲も更新する必要があります。この期間のデータに基づいてy軸の範囲を更新するのに問題があります。

私のデータは次のようになります。

F_OCURRENCIA_HECHO,displacement 
1985-01-01,6.0 
1985-02-01,1.0 
1985-04-01,1.0 
... 
2015-10-01,,309.0 
2015-11-01,106.0 
2015-12-01,46.0 

そしてこれまでのところ、私は私のグラフは次のようになります更新一部:

svg.on("click", function() { 
x.domain([new Date(2000,01,01), new Date(2005,01,01)]); 
y.domain(d3.extent(data, function(d) { return d.displacement; })); 
var t = svg.transition().duration(750); 
t.select(".y.axis").call(d3.axisLeft(y)); 
t.select(".x.axis").call(d3.axisBottom(x)).select(".domain").remove(); 
t.select(".line").attr("d", line); 
}); 

y.domain(d3.extent(data, function(d) { return d.displacement; }));が範囲に基づいて取得することを私にするにはどうすればよいです新しい日付?

ご協力いただきますようお願い申し上げます。ありがとう!

+0

だから、あなたはズームがx軸上で起こるしたいと言っている、とあなたが常に表示するようにY軸にしたいですxウィンドウ内のデータの範囲?したがって、基本的に範囲の最低値は常にチャートの最下部に接触し、最高値は常にトップに接触します。 – anderspitman

+0

@anderspitmanグラフを1985年から2015年までの間に拡大するのではなく、2000年から2005年にしたいと思っていますが、同時にその変化を反映するためにy軸を設定します。したがって、y軸の上端は、新しい時間範囲の最大値を表し、データセット全体では最大値を表しません。それは理にかなったDoestですか?ありがとう。 –

答えて

0

2つの日付の間だけのデータポイントでy.domainを計算してみてください。

svg.on("click", function() { 
    var startDate = new Date(2000,1,1) 
    var endDate = new Date(2005,1,1) 
    var activeData = data.filter(function(d){ 
    return startDate <= d.F_OCURRENCIA_HECHO && d.F_OCURRENCIA_HECHO <= endDate }) 

    x.domain([startDate, endDate]); 
    y.domain(d3.extent(activeData, function(d) { return d.displacement; })); 

    ... 
関連する問題