2016-09-05 5 views
1

d3 4.2.2と一緒にAngular2のグラフを作成しています。私は複数の系列の折れ線グラフを作成しましたが、今はもっと多くの機能を追加しようとしています。私のデータソースは90日間のデータを持ち、チャートはすべてのデータを表示しますが、見栄えが良くありません。そこで、ズームとパンの機能をチャートに追加することになりました。しかし、結果は私が本当に期待したものではありません。 X軸ラベルが重なっています。軸名は半分を表示しています。ここで私が試したことがあります。角度2のD3 V4グラフのドラッグ&ズーム

データソース

var data = [{ 
    "date": "2016-10-01", 
    "sales": 110, 
    "searches": 67 
}, 
.... 
{ 
    "date": "2016-12-31", 
    "sales": 110, 
    "searches": 45 
}]; 

&パン

var svg = d3.select(this.htmlElement).append("svg") 
    .attr("class", "bar-graph") 
    .attr("width", width + margin.left + margin.right) 
    .attr("height", height + margin.top + margin.bottom) 
    .call(d3.zoom().scaleExtent([1, 10]).on("zoom", function() { 
     svg.attr("transform", d3.event.transform) 
    })) 
    .append("g") 
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 

は、追加のズームを追加するには私のチャートは以下のように見える終わりに

// Add the X Axis 
svg.append("g") 
    .style("font", "14px open-sans") 
    .attr("transform", "translate(0," + height + ")") 
    .call(d3.axisBottom(x).ticks(d3.timeDay.every(1)).tickFormat(d3.timeFormat("%d/%m"))); 


// Add the Y Axis 
svg.append("g") 
    .style("font", "14px open-sans") 
    //.tickSize(-height) 
    .call(d3.axisLeft(y).ticks(5)); 

を刻みます。

enter image description here

今のチャートは、グラフ全体として&ドラッグをズームすることができます。表示するx軸のティック数を制限する方法はありますか?ユーザーはドラッグしてグラフの残りの部分を見ることができますか?

誰もが私のチャートは良いが

を見て作るために私を助けるためにとても親切にすることができれば、私は多くの義務を負うことになる

はあなたがズームに変換、ズーム付きのx軸とy軸を再計算する必要が

+0

この 'ticks(d3.timeDay.every(10))'を試してみましたが、x軸を10日間隔で表示しましたか?これは可読性を改善するはずです – Cyril

+0

はい、x軸は10日間隔で表示されます。しかし、私はすべてのデータポイント(毎日)を表示したい。最初に10日を表示し、ユーザーはグラフをドラッグして残りの日を表示できます。 – Rose18

答えて

1

ありがとう コールバック関数。

function zoomed() { 
    var t = d3.event.transform, 
     xt = t.rescaleX(x); 
     yt = t.rescaleY(y); 
    svg.attr("transform", t) 
    var line = d3.line() 
     .x(function(d) { 
      return xt(d.date); 
     }) 
     .y(function(d) { 
      return yt(d.scales); 
     }); 
    g.select("path").attr("d", line); 
    svg.select(".axis--x").call(xAxis.scale(xt)); 
} 
関連する問題