Skip to content

Commit c578cde

Browse files
committed
replace gd.numboxes by fullLayout._numBoxes
1 parent af9f9e7 commit c578cde

File tree

5 files changed

+33
-22
lines changed

5 files changed

+33
-22
lines changed

src/plots/plots.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1342,7 +1342,6 @@ plots.purge = function(gd) {
13421342
delete gd.firstscatter;
13431343
delete gd._hmlumcount;
13441344
delete gd._hmpixcount;
1345-
delete gd.numboxes;
13461345
delete gd._transitionData;
13471346
delete gd._transitioning;
13481347
delete gd._initialAutoSize;
@@ -2159,8 +2158,8 @@ plots.doCalcdata = function(gd, traces) {
21592158
// firstscatter: fill-to-next on the first trace goes to zero
21602159
gd.firstscatter = true;
21612160

2162-
// how many box plots do we have (in case they're grouped)
2163-
gd.numboxes = 0;
2161+
// how many box/violins plots do we have (in case they're grouped)
2162+
fullLayout._numBoxes = 0;
21642163

21652164
// for calculating avg luminosity of heatmaps
21662165
gd._hmpixcount = 0;

src/traces/box/calc.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@ var Axes = require('../../plots/cartesian/axes');
1515

1616
// outlier definition based on http://www.physics.csbsju.edu/stats/box2.html
1717
module.exports = function calc(gd, trace) {
18+
var fullLayout = gd._fullLayout;
1819
var xa = Axes.getFromId(gd, trace.xaxis || 'x');
1920
var ya = Axes.getFromId(gd, trace.yaxis || 'y');
2021
var orientation = trace.orientation;
2122
var cd = [];
2223

24+
var numKey = '_numBoxes';
25+
2326
var i;
2427
var valAxis, valLetter;
2528
var posAxis, posLetter;
@@ -37,7 +40,7 @@ module.exports = function calc(gd, trace) {
3740
}
3841

3942
var val = valAxis.makeCalcdata(trace, valLetter);
40-
var pos = getPos(trace, posLetter, posAxis, val, gd.numboxes);
43+
var pos = getPos(trace, posLetter, posAxis, val, fullLayout[numKey]);
4144

4245
var dv = Lib.distinctVals(pos);
4346
var posDistinct = dv.vals;
@@ -115,10 +118,11 @@ module.exports = function calc(gd, trace) {
115118

116119
if(cd.length > 0) {
117120
cd[0].t = {
118-
boxnum: gd.numboxes,
121+
num: fullLayout[numKey],
119122
dPos: dPos
120123
};
121-
gd.numboxes++;
124+
125+
fullLayout[numKey]++;
122126
return cd;
123127
} else {
124128
return [{t: {emptybox: true}}];
@@ -130,7 +134,7 @@ module.exports = function calc(gd, trace) {
130134
// so if you want one box
131135
// per trace, set x0 (y0) to the x (y) value or category for this trace
132136
// (or set x (y) to a constant array matching y (x))
133-
function getPos(trace, posLetter, posAxis, val, numboxes) {
137+
function getPos(trace, posLetter, posAxis, val, num) {
134138
if(posLetter in trace) {
135139
return posAxis.makeCalcdata(trace, posLetter);
136140
}
@@ -150,7 +154,7 @@ function getPos(trace, posLetter, posAxis, val, numboxes) {
150154
)) {
151155
pos0 = trace.name;
152156
} else {
153-
pos0 = numboxes;
157+
pos0 = num;
154158
}
155159

156160
var pos0c = posAxis.d2c(pos0, 0, trace[posLetter + 'calendar']);

src/traces/box/plot.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,13 @@ module.exports = function plot(gd, plotinfo, cdbox) {
4949
var t = cd0.t;
5050
var trace = cd0.trace;
5151
var sel = cd0.node3 = d3.select(this);
52+
var numBoxes = fullLayout._numBoxes;
5253

53-
var group = (fullLayout.boxmode === 'group' && gd.numboxes > 1);
54+
var group = (fullLayout.boxmode === 'group' && numBoxes > 1);
5455
// box half width
55-
var bdPos = t.dPos * (1 - fullLayout.boxgap) * (1 - fullLayout.boxgroupgap) / (group ? gd.numboxes : 1);
56+
var bdPos = t.dPos * (1 - fullLayout.boxgap) * (1 - fullLayout.boxgroupgap) / (group ? numBoxes : 1);
5657
// box center offset
57-
var bPos = group ? 2 * t.dPos * (-0.5 + (t.boxnum + 0.5) / gd.numboxes) * (1 - fullLayout.boxgap) : 0;
58+
var bPos = group ? 2 * t.dPos * (-0.5 + (t.num + 0.5) / numBoxes) * (1 - fullLayout.boxgap) : 0;
5859
// whisker width
5960
var wdPos = bdPos * trace.whiskerwidth;
6061

src/traces/box/set_positions.js

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,13 @@ var Lib = require('../../lib');
1414

1515

1616
module.exports = function setPositions(gd, plotinfo) {
17-
var fullLayout = gd._fullLayout,
18-
xa = plotinfo.xaxis,
19-
ya = plotinfo.yaxis,
20-
orientations = ['v', 'h'];
17+
var fullLayout = gd._fullLayout;
18+
var xa = plotinfo.xaxis;
19+
var ya = plotinfo.yaxis;
20+
var orientations = ['v', 'h'];
21+
22+
var numKey = '_numBoxes';
23+
2124
var posAxis, i, j, k;
2225

2326
for(i = 0; i < orientations.length; ++i) {
@@ -63,12 +66,14 @@ module.exports = function setPositions(gd, plotinfo) {
6366
// box plots - update dPos based on multiple traces
6467
// and then use for posAxis autorange
6568

66-
var boxdv = Lib.distinctVals(boxpointlist),
67-
dPos = boxdv.minDiff / 2;
69+
var boxdv = Lib.distinctVals(boxpointlist);
70+
var dPos = boxdv.minDiff / 2;
6871

6972
// if there's no duplication of x points,
70-
// disable 'group' mode by setting numboxes=1
71-
if(boxpointlist.length === boxdv.vals.length) gd.numboxes = 1;
73+
// disable 'group' mode by setting counter to 1
74+
if(boxpointlist.length === boxdv.vals.length) {
75+
fullLayout[numKey] = 1;
76+
}
7277

7378
// check for forced minimum dtick
7479
Axes.minDtick(posAxis, boxdv.minDiff, boxdv.vals[0], true);
@@ -79,11 +84,13 @@ module.exports = function setPositions(gd, plotinfo) {
7984
gd.calcdata[boxListIndex][0].t.dPos = dPos;
8085
}
8186

87+
var gap = fullLayout.boxgap;
88+
var groupgap = fullLayout.boxgroupgap;
89+
8290
// autoscale the x axis - including space for points if they're off the side
8391
// TODO: this will overdo it if the outermost boxes don't have
8492
// their points as far out as the other boxes
85-
var padfactor = (1 - fullLayout.boxgap) * (1 - fullLayout.boxgroupgap) *
86-
dPos / gd.numboxes;
93+
var padfactor = (1 - gap) * (1 - groupgap) * dPos / fullLayout[numKey];
8794
Axes.expand(posAxis, boxdv.vals, {
8895
vpadminus: dPos + minPad * padfactor,
8996
vpadplus: dPos + maxPad * padfactor

test/jasmine/tests/plots_test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ describe('Test Plots', function() {
435435
var expectedUndefined = [
436436
'data', 'layout', '_fullData', '_fullLayout', 'calcdata', 'framework',
437437
'empty', 'fid', 'undoqueue', 'undonum', 'autoplay', 'changed',
438-
'_promises', '_redrawTimer', 'firstscatter', 'numboxes',
438+
'_promises', '_redrawTimer', 'firstscatter',
439439
'_transitionData', '_transitioning', '_hmpixcount', '_hmlumcount',
440440
'_dragging', '_dragged', '_hoverdata', '_snapshotInProgress', '_editing',
441441
'_replotPending', '_mouseDownTime', '_legendMouseDownTime'

0 commit comments

Comments
 (0)