@@ -2539,25 +2539,20 @@ def handle_single_axis(scale, autoscaleon, shared_axes, interval,
25392539 return # nothing to do...
25402540
25412541 shared = shared_axes .get_siblings (self )
2542- dl = [ax .dataLim for ax in shared ]
2543- # ignore non-finite data limits if good limits exist
2544- finite_dl = [d for d in dl if np .isfinite (d ).all ()]
2545- if len (finite_dl ):
2546- # if finite limits exist for at least one axis (and the
2547- # other is infinite), restore the finite limits
2548- x_finite = [d for d in dl
2549- if (np .isfinite (d .intervalx ).all () and
2550- (d not in finite_dl ))]
2551- y_finite = [d for d in dl
2552- if (np .isfinite (d .intervaly ).all () and
2553- (d not in finite_dl ))]
2554-
2555- dl = finite_dl
2556- dl .extend (x_finite )
2557- dl .extend (y_finite )
2558-
2559- bb = mtransforms .BboxBase .union (dl )
2560- x0 , x1 = getattr (bb , interval )
2542+ # Base autoscaling on finite data limits when there is at least one
2543+ # finite data limit among all the shared_axes and intervals.
2544+ # Also, find the minimum minpos for use in the margin calculation.
2545+ x_values = []
2546+ minimum_minpos = np .inf
2547+ for ax in shared :
2548+ x_values .extend (getattr (ax .dataLim , interval ))
2549+ minimum_minpos = min (minimum_minpos ,
2550+ getattr (ax .dataLim , minpos ))
2551+ x_values = np .extract (np .isfinite (x_values ), x_values )
2552+ if x_values .size >= 1 :
2553+ x0 , x1 = (x_values .min (), x_values .max ())
2554+ else :
2555+ x0 , x1 = (- np .inf , np .inf )
25612556 # If x0 and x1 are non finite, use the locator to figure out
25622557 # default limits.
25632558 locator = axis .get_major_locator ()
@@ -2578,10 +2573,9 @@ def handle_single_axis(scale, autoscaleon, shared_axes, interval,
25782573
25792574 # Add the margin in figure space and then transform back, to handle
25802575 # non-linear scales.
2581- minpos = getattr (bb , minpos )
25822576 transform = axis .get_transform ()
25832577 inverse_trans = transform .inverted ()
2584- x0 , x1 = axis ._scale .limit_range_for_scale (x0 , x1 , minpos )
2578+ x0 , x1 = axis ._scale .limit_range_for_scale (x0 , x1 , minimum_minpos )
25852579 x0t , x1t = transform .transform ([x0 , x1 ])
25862580 delta = (x1t - x0t ) * margin
25872581 if not np .isfinite (delta ):
0 commit comments