2017-06-23 7 views
1

thisトピックを使用して、dc.lineChartで自分のカスタム時間間隔を生成します。私は小さいに時間間隔を変更する必要があり、ズーム後ズーム後の時間間隔を変更する

enter image description here

:それは次の写真のように見える間隔5分で 。私が理解しているように、私は新しいインターバルでいくつかの再グループをする必要がありますが、どうすればいいですか?

+1

[私が以前に送信した例](http://dc-js.github.io/dc.js/examples/switching-time-intervals.html)を見ていただければ幸いです。あなたはそれを統合しようとしましたか?次に何が起こったのですか? – Gordon

+0

はい、おそらく完全に理解できませんでした。 '.rangeChart'を使うと、どこから' setup() '関数を呼び出すべきですか? 'onFiltered'リスナーに追加しますか? –

+0

私は['zoomed'イベント](http://dc-js.github.io/dc.js/docs/html/dc.baseMixin.html#on__anchor)のリスナーと一緒に行くつもりです。このためにdc.jsに例を含めることは素晴らしいことでしょう。あなたが貢献したいのであれば、(これをフォークすることによって)フィーリングを開始することができます(http://jsfiddle.net/gordonwoodhull/u57bfje8/)、 'zoomed'リスナーと他の例のコードから始めましょう。あなたの質問を破り、更新しますか? – Gordon

答えて

1

私はthisの例を使用して、on.('zoomed') chart listenerにいくつかのロジックを追加しました。私はに他の人のためのいくつかの例を書いた。

// read data 
let experiments = d3.csv.parse(someCsvData); 

//create and bind charts 
let chart = dc.lineChart('#chart'), 
    scrollChart = dc.barChart('#scrollChart'); 

// parse date  
experiments.forEach(x => { 
    x.date = Date.parse(x.date); 
}); 

// create crossfilter, dimension and group 
let ndx = crossfilter(experiments), 
    dim = ndx.dimension(d => new Date(d.date)), 
    scrollGroup = dim.group(d3.time.month).reduceSum(d => +d.volume) 

// define function for selecting time ticks 
const getNormalizingTimeFunction = (dataSize) => { 
    switch (true) { 
     case dataSize < 100: 
      return d3.time.day; 
     case dataSize < 300: 
      return d3.time.week; 
     default: 
      return d3.time.month; 
    } 
} 

// create `start` and `end` time points 
let startDate = experiments[0].date; 
let endDate = experiments[experiments.length - 1].date; 

scrollChart 
    .width(768) 
    .height(50) 
    .x(d3.time.scale().domain([startDate, endDate])) 
    .margins({left: 50, top: 10, right: 10, bottom: 20}) 
    .clipPadding(10) 
    .dimension(dim) 
    .group(scrollGroup) 
    .alwaysUseRounding(true) 
    .elasticY(true) 
    .yAxis().ticks(0); 

chart 
.width(768) 
.height(480) 
.brushOn(false) 
.x(d3.time.scale().domain([startDate, endDate])) 
.margins({left: 50, top: 10, right: 10, bottom: 20}) 
.rangeChart(scrollChart) 
.dimension(dim) 
.group(scrollGroup) 
.renderArea(true) 
.on('zoomed', (chart) => { 
    let actions = dim.top(Infinity); 
    let normalizeTime = getNormalizingTimeFunction(actions.length); 
    let newGroup = dim.group(normalizeTime).reduceSum(d => +d.volume) 
    chart.group(newGroup); 
    chart.redraw(); 
}); 

chart.render(); 
scrollChart.render(); 
関連する問題