@@ -54,7 +54,8 @@ function getAutoRange(gd, ax) {
5454 var i , j ;
5555 var newRange = [ ] ;
5656
57- var getPad = makePadFn ( ax ) ;
57+ var getPadMin = makePadFn ( ax , 0 ) ;
58+ var getPadMax = makePadFn ( ax , 1 ) ;
5859 var extremes = concatExtremes ( gd , ax ) ;
5960 var minArray = extremes . min ;
6061 var maxArray = extremes . max ;
@@ -104,7 +105,7 @@ function getAutoRange(gd, ax) {
104105 maxpt = maxArray [ j ] ;
105106 dv = maxpt . val - minpt . val - calcBreaksLength ( ax , minpt . val , maxpt . val ) ;
106107 if ( dv > 0 ) {
107- dp = axLen - getPad ( minpt ) - getPad ( maxpt ) ;
108+ dp = axLen - getPadMin ( minpt ) - getPadMax ( maxpt ) ;
108109 if ( dp > minSpan ) {
109110 if ( dv / dp > mbest ) {
110111 minbest = minpt ;
@@ -122,8 +123,8 @@ function getAutoRange(gd, ax) {
122123 }
123124 }
124125
125- function getMaxPad ( prev , pt ) {
126- return Math . max ( prev , getPad ( pt ) ) ;
126+ function maximumPad ( prev , pt ) {
127+ return Math . max ( prev , getPadMax ( pt ) ) ;
127128 }
128129
129130 if ( minmin === maxmax ) {
@@ -137,7 +138,7 @@ function getAutoRange(gd, ax) {
137138 // 'tozero' pins 0 to the low end, so follow that.
138139 newRange = [ 0 , 1 ] ;
139140 } else {
140- var maxPad = ( minmin > 0 ? maxArray : minArray ) . reduce ( getMaxPad , 0 ) ;
141+ var maxPad = ( minmin > 0 ? maxArray : minArray ) . reduce ( maximumPad , 0 ) ;
141142 // we're pushing a single value away from the edge due to its
142143 // padding, with the other end clamped at zero
143144 // 0.5 means don't push it farther than the center.
@@ -158,7 +159,7 @@ function getAutoRange(gd, ax) {
158159 maxbest = { val : 0 , pad : 0 } ;
159160 }
160161 } else if ( nonNegative ) {
161- if ( minbest . val - mbest * getPad ( minbest ) < 0 ) {
162+ if ( minbest . val - mbest * getPadMin ( minbest ) < 0 ) {
162163 minbest = { val : 0 , pad : 0 } ;
163164 }
164165 if ( maxbest . val <= 0 ) {
@@ -168,11 +169,11 @@ function getAutoRange(gd, ax) {
168169
169170 // in case it changed again...
170171 mbest = ( maxbest . val - minbest . val - calcBreaksLength ( ax , minpt . val , maxpt . val ) ) /
171- ( axLen - getPad ( minbest ) - getPad ( maxbest ) ) ;
172+ ( axLen - getPadMin ( minbest ) - getPadMax ( maxbest ) ) ;
172173
173174 newRange = [
174- minbest . val - mbest * getPad ( minbest ) ,
175- maxbest . val + mbest * getPad ( maxbest )
175+ minbest . val - mbest * getPadMin ( minbest ) ,
176+ maxbest . val + mbest * getPadMax ( maxbest )
176177 ] ;
177178 }
178179
@@ -199,9 +200,41 @@ function calcBreaksLength(ax, v0, v1) {
199200 * calculate the pixel padding for ax._min and ax._max entries with
200201 * optional extrapad as 5% of the total axis length
201202 */
202- function makePadFn ( ax ) {
203+ function makePadFn ( ax , max ) {
203204 // 5% padding for points that specify extrapad: true
204- var extrappad = ax . _length / 20 ;
205+ var extrappad = 0.05 * ax . _length ;
206+
207+ var anchorAxis = ( ax . _anchorAxis || { } ) ;
208+ if ( ( anchorAxis . ticklabelposition || '' ) . indexOf ( 'inside' ) !== - 1 ) {
209+ var axReverse = ax . autorange === 'reversed' ;
210+ if ( ! axReverse ) {
211+ var rng = Lib . simpleMap ( ax . range , ax . r2l ) ;
212+ axReverse = rng [ 1 ] < rng [ 0 ] ;
213+ }
214+ if ( axReverse ) max = ! max ;
215+
216+ // increase padding to make more room for inside tick labels of the counter axis
217+ if ( (
218+ ! max && (
219+ anchorAxis . side === 'left' ||
220+ anchorAxis . side === 'bottom'
221+ )
222+ ) || (
223+ max && (
224+ anchorAxis . side === 'top' ||
225+ anchorAxis . side === 'right'
226+ )
227+ ) ) {
228+ var fontSize = anchorAxis . tickfont ? anchorAxis . tickfont . size : 12 ;
229+ var newPad = fontSize * ( ax . _id . charAt ( 0 ) === 'x' ? 4 : 1 ) ;
230+
231+ if ( anchorAxis . ticks === 'inside' && anchorAxis . ticklabelposition === 'inside' ) {
232+ newPad += anchorAxis . ticklen || 0 ;
233+ }
234+
235+ extrappad = Math . max ( extrappad , newPad ) ;
236+ }
237+ }
205238
206239 // domain-constrained axes: base extrappad on the unconstrained
207240 // domain so it's consistent as the domain changes
@@ -210,7 +243,11 @@ function makePadFn(ax) {
210243 ( ax . domain [ 1 ] - ax . domain [ 0 ] ) ;
211244 }
212245
213- return function getPad ( pt ) { return pt . pad + ( pt . extrapad ? extrappad : 0 ) ; } ;
246+ if ( max ) {
247+ return function getPadMax ( pt ) { return pt . pad + ( pt . extrapad ? extrappad : 0 ) ; } ;
248+ } else {
249+ return function getPadMin ( pt ) { return pt . pad + ( pt . extrapad ? extrappad : 0 ) ; } ;
250+ }
214251}
215252
216253function concatExtremes ( gd , ax ) {
0 commit comments