/*** Turn on adaptive binning for line charts.* 2017-07-26 Piotr Szrajber <piotr.szrajber@hexagongeospatial.com>*/letN_BINS=50;// best results 20..100functionfindMinMax(data,property){returndata.reduce((acc,c)=>({min:Math.min(acc.min,c[property]),max:Math.max(acc.max,c[property])}),{min:Infinity,max:-Infinity});}functionturnOnAdaptiveBinning(widget){gsp.bi.stage.requireLibraries(function(gvc){varproperty=widget.chartM.key[0],// dimensionstage=widget.chart.dataStage(),// get reference to the dataStageminMax=findMinMax(stage.rows(),property),// compute min & maxrange=minMax.max-minMax.min,customDimension=stage.facts().dimension(function(d){letvalue=d[property];returnvalue-value%(range/N_BINS);// provided by Dave Oke <david.oke at hexagongeospatial.com>}),customGroup=gvc.dataReducers({}).reduceGrouping(customDimension.group(),stage.stageModel().values,"whatever");widget.chart.dimension(customDimension);widget.chart.group(customGroup);//widget.chart.xAxis().scale().domain([0,50]); // modify the x domainwidget.chart.redraw();});}functionmodifyLineCharts(callback,errback){// find all line chartsgsp.bi.stage.findWidgets({descriptors:[{chartM:{chart:"line"}}]},function(widgets){widgets.forEach(turnOnAdaptiveBinning);if(typeofcallback==="function")callback(widgets);},errback)}modifyLineCharts(()=>console.log("hooray!"),()=>console.error("something went wrong!"));
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.