MCPcopy Index your code
hub / github.com/plotly/plotly.js / calcAllAutoBins

Function calcAllAutoBins

src/traces/histogram/calc.js:242–425  ·  view source on GitHub ↗
(gd, trace, pa, mainData, _overlayEdgeCase)

Source from the content-addressed store, hash-verified

240 * bingroup.
241 */
242function calcAllAutoBins(gd, trace, pa, mainData, _overlayEdgeCase) {
243 var binAttr = mainData + 'bins';
244 var fullLayout = gd._fullLayout;
245 var groupName = trace['_' + mainData + 'bingroup'];
246 var binOpts = fullLayout._histogramBinOpts[groupName];
247 var isOverlay = fullLayout.barmode === 'overlay';
248 var i, traces, tracei, calendar, pos0, autoVals, cumulativeSpec;
249
250 var r2c = function(v) { return pa.r2c(v, 0, calendar); };
251 var c2r = function(v) { return pa.c2r(v, 0, calendar); };
252
253 var cleanBound = pa.type === 'date' ?
254 function(v) { return (v || v === 0) ? Lib.cleanDate(v, null, calendar) : null; } :
255 function(v) { return isNumeric(v) ? Number(v) : null; };
256
257 function setBound(attr, bins, newBins) {
258 if(bins[attr + 'Found']) {
259 bins[attr] = cleanBound(bins[attr]);
260 if(bins[attr] === null) bins[attr] = newBins[attr];
261 } else {
262 autoVals[attr] = bins[attr] = newBins[attr];
263 Lib.nestedProperty(traces[0], binAttr + '.' + attr).set(newBins[attr]);
264 }
265 }
266
267 // all but the first trace in this group has already been marked finished
268 // clear this flag, so next time we run calc we will run autobin again
269 if(trace['_' + mainData + 'autoBinFinished']) {
270 delete trace['_' + mainData + 'autoBinFinished'];
271 } else {
272 traces = binOpts.traces;
273 var allPos = [];
274
275 // Note: we're including `legendonly` traces here for autobin purposes,
276 // so that showing & hiding from the legend won't affect bins.
277 // But this complicates things a bit since those traces don't `calc`,
278 // hence `isFirstVisible`.
279 var isFirstVisible = true;
280 var has2dMap = false;
281 var hasHist2dContour = false;
282 for(i = 0; i < traces.length; i++) {
283 tracei = traces[i];
284
285 if(tracei.visible) {
286 var mainDatai = binOpts.dirs[i];
287 pos0 = tracei['_' + mainDatai + 'pos0'] = pa.makeCalcdata(tracei, mainDatai);
288
289 allPos = Lib.concat(allPos, pos0);
290 delete tracei['_' + mainData + 'autoBinFinished'];
291
292 if(trace.visible === true) {
293 if(isFirstVisible) {
294 isFirstVisible = false;
295 } else {
296 delete tracei._autoBin;
297 tracei['_' + mainData + 'autoBinFinished'] = 1;
298 }
299 if(Registry.traceIs(tracei, '2dMap')) {

Callers 3

calc.jsFile · 0.85
calcFunction · 0.85

Calls 4

c2rFunction · 0.85
r2cFunction · 0.85
setBoundFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…