@@ -76,18 +76,12 @@ function setGroupPositionsInOverlayMode(gd, pa, sa, traces) {
76
76
// update position axis and set bar offsets and widths
77
77
traces . forEach ( function ( trace ) {
78
78
var sieve = new Sieve (
79
- [ trace ] , separateNegativeValues , dontMergeOverlappingData
80
- ) ,
81
- minDiff = sieve . minDiff ,
82
- distinctPositions = sieve . distinctPositions ;
79
+ [ trace ] , separateNegativeValues , dontMergeOverlappingData
80
+ ) ;
83
81
84
- // set bar offsets and widths
82
+ // set bar offsets and widths and update position axis
85
83
setOffsetAndWidth ( gd , pa , sieve ) ;
86
84
87
- // update position axis
88
- Axes . minDtick ( pa , minDiff , distinctPositions [ 0 ] ) ;
89
- Axes . expand ( pa , distinctPositions , { vpad : minDiff / 2 } ) ;
90
-
91
85
// update size axis and set bar bases and sizes
92
86
if ( barnorm ) {
93
87
stackBars ( gd , sa , sieve ) ;
@@ -102,6 +96,8 @@ function setGroupPositionsInOverlayMode(gd, pa, sa, traces) {
102
96
Axes . expand ( sa , trace . map ( fs ) , { tozero : true , padded : true } ) ;
103
97
}
104
98
} ) ;
99
+
100
+ applyBarbase ( gd , sa , traces ) ;
105
101
}
106
102
107
103
@@ -112,17 +108,11 @@ function setGroupPositionsInGroupMode(gd, pa, sa, traces) {
112
108
dontMergeOverlappingData = ! barnorm ,
113
109
sieve = new Sieve (
114
110
traces , separateNegativeValues , dontMergeOverlappingData
115
- ) ,
116
- minDiff = sieve . minDiff ,
117
- distinctPositions = sieve . distinctPositions ;
111
+ ) ;
118
112
119
- // set bar offsets and widths
113
+ // set bar offsets and widths and update position axis
120
114
setOffsetAndWidthInGroupMode ( gd , pa , sieve ) ;
121
115
122
- // update position axis
123
- Axes . minDtick ( pa , minDiff , distinctPositions [ 0 ] ) ;
124
- Axes . expand ( pa , distinctPositions , { vpad : minDiff / 2 } ) ;
125
-
126
116
// update size axis and set bar bases and sizes
127
117
if ( barnorm ) {
128
118
stackBars ( gd , sa , sieve ) ;
@@ -138,6 +128,8 @@ function setGroupPositionsInGroupMode(gd, pa, sa, traces) {
138
128
Axes . expand ( sa , traces [ i ] . map ( fs ) , { tozero : true , padded : true } ) ;
139
129
}
140
130
}
131
+
132
+ applyBarbase ( gd , sa , traces ) ;
141
133
}
142
134
143
135
@@ -151,18 +143,12 @@ function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, traces) {
151
143
dontMergeOverlappingData = ! ( barnorm || stack || relative ) ,
152
144
sieve = new Sieve (
153
145
traces , separateNegativeValues , dontMergeOverlappingData
154
- ) ,
155
- minDiff = sieve . minDiff ,
156
- distinctPositions = sieve . distinctPositions ;
146
+ ) ;
157
147
158
- // set bar offsets and widths
148
+ // set bar offsets and widths and update position axis
159
149
setOffsetAndWidth ( gd , pa , sieve ) ;
160
150
161
- // update position axis
162
- Axes . minDtick ( pa , minDiff , distinctPositions [ 0 ] ) ;
163
- Axes . expand ( pa , distinctPositions , { vpad : minDiff / 2 } ) ;
164
-
165
- // set bar bases and sizes
151
+ // set bar bases and sizes and update size axis
166
152
stackBars ( gd , sa , sieve ) ;
167
153
}
168
154
@@ -199,6 +185,11 @@ function setOffsetAndWidth(gd, pa, sieve) {
199
185
bar [ pLetter ] = bar . p + barCenter ;
200
186
}
201
187
}
188
+
189
+ // update position axis
190
+ var distinctPositions = sieve . distinctPositions ;
191
+ Axes . minDtick ( pa , minDiff , distinctPositions [ 0 ] ) ;
192
+ Axes . expand ( pa , distinctPositions , { vpad : minDiff / 2 } ) ;
202
193
}
203
194
204
195
@@ -243,6 +234,10 @@ function setOffsetAndWidthInGroupMode(gd, pa, sieve) {
243
234
bar [ pLetter ] = bar . p + barCenter ;
244
235
}
245
236
}
237
+
238
+ // update position axis
239
+ Axes . minDtick ( pa , minDiff , distinctPositions [ 0 ] , overlap ) ;
240
+ Axes . expand ( pa , distinctPositions , { vpad : minDiff / 2 } ) ;
246
241
}
247
242
248
243
@@ -318,9 +313,11 @@ function normalizeBars(gd, sa, sieve) {
318
313
var trace = traces [ i ] ;
319
314
320
315
for ( var j = 0 ; j < trace . length ; j ++ ) {
321
- var bar = trace [ j ] ,
322
- scale = Math . abs ( sTop / sieve . get ( bar . p , bar . s ) ) ;
316
+ var bar = trace [ j ] ;
317
+
318
+ if ( ! isNumeric ( bar . s ) ) continue ;
323
319
320
+ var scale = Math . abs ( sTop / sieve . get ( bar . p , bar . s ) ) ;
324
321
bar . b *= scale ;
325
322
bar . s *= scale ;
326
323
var barEnd = bar . b + bar . s ;
@@ -343,6 +340,27 @@ function normalizeBars(gd, sa, sieve) {
343
340
}
344
341
345
342
343
+ function applyBarbase ( gd , sa , traces ) {
344
+ var barbase = gd . _fullLayout . barbase ;
345
+ if ( ! barbase || ! isNumeric ( sa . c2l ( barbase ) ) ) return ;
346
+
347
+ for ( var i = 0 ; i < traces . length ; i ++ ) {
348
+ var trace = traces [ i ] ;
349
+
350
+ for ( var j = 0 ; j < trace . length ; j ++ ) {
351
+ var bar = trace [ j ] ,
352
+ bartop = bar . b + bar . s ;
353
+ if ( isNumeric ( sa . c2l ( bartop ) ) ) {
354
+ bar . b = barbase ;
355
+ bar . s = bartop - barbase ;
356
+ }
357
+ }
358
+ }
359
+
360
+ Axes . expand ( sa , [ barbase ] , { tozero : true , padded : true } ) ;
361
+ }
362
+
363
+
346
364
function getAxisLetter ( ax ) {
347
365
return ax . _id . charAt ( 0 ) ;
348
366
}
0 commit comments