@@ -102,12 +102,21 @@ function calc(gd, trace) {
102102 } ;
103103 }
104104
105+ // stash left and right gaps by group
106+ if ( ! gd . _fullLayout . _roundFnOpts ) gd . _fullLayout . _roundFnOpts = { } ;
107+ var groupName = trace [ '_' + mainData + 'bingroup' ] ;
108+ var roundFnOpts = { leftGap : Infinity , rightGap : Infinity } ;
109+ if ( groupName ) {
110+ if ( ! gd . _fullLayout . _roundFnOpts [ groupName ] ) gd . _fullLayout . _roundFnOpts [ groupName ] = roundFnOpts ;
111+ roundFnOpts = gd . _fullLayout . _roundFnOpts [ groupName ] ;
112+ }
113+
105114 // bin the data
106115 // and make histogram-specific pt-number-to-cd-index map object
107116 var nMax = size . length ;
108117 var uniqueValsPerBin = true ;
109- var leftGap = Infinity ;
110- var rightGap = Infinity ;
118+ var leftGap = roundFnOpts . leftGap ;
119+ var rightGap = roundFnOpts . rightGap ;
111120 var ptNumber2cdIndex = { } ;
112121 for ( i = 0 ; i < pos0 . length ; i ++ ) {
113122 var posi = pos0 [ i ] ;
@@ -124,10 +133,21 @@ function calc(gd, trace) {
124133 rightGap = Math . min ( rightGap , binEdges [ n + 1 ] - posi ) ;
125134 }
126135 }
136+ roundFnOpts . leftGap = leftGap ;
137+ roundFnOpts . rightGap = rightGap ;
127138
128139 var roundFn ;
129140 if ( ! uniqueValsPerBin ) {
130- roundFn = getBinSpanLabelRound ( leftGap , rightGap , binEdges , pa , calendar ) ;
141+ roundFn = function ( v , isRightEdge ) {
142+ return function ( ) {
143+ var roundFnOpts = gd . _fullLayout . _roundFnOpts [ groupName ] ;
144+ return getBinSpanLabelRound (
145+ roundFnOpts . leftGap ,
146+ roundFnOpts . rightGap ,
147+ binEdges , pa , calendar
148+ ) ( v , isRightEdge ) ;
149+ } ;
150+ } ;
131151 }
132152
133153 // average and/or normalize the data, if needed
@@ -173,6 +193,8 @@ function calc(gd, trace) {
173193 if ( uniqueValsPerBin ) {
174194 cdi . ph0 = cdi . ph1 = ( inputPoints [ i ] . length ) ? pos0 [ inputPoints [ i ] [ 0 ] ] : pos [ i ] ;
175195 } else {
196+ // Defer evaluation of ph(0|1) in crossTraceCalc
197+ trace . _computePh = true ;
176198 cdi . ph0 = roundFn ( binEdges [ i ] ) ;
177199 cdi . ph1 = roundFn ( binEdges [ i + 1 ] , true ) ;
178200 }
0 commit comments