@@ -2539,20 +2539,19 @@ def handle_single_axis(scale, autoscaleon, shared_axes, interval,
2539
2539
return # nothing to do...
2540
2540
2541
2541
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
- # issue 18137: The previous code would allow one subplot with
2545
- # inifinite data limits to 'clobber' other subplots with finite
2546
- # data limits.
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.
2547
2545
x_values = []
2548
- minpos_values = []
2549
- for d in dl :
2550
- x_values .extend (getattr (d , interval ))
2551
- minpos_values .append (getattr (d , minpos ))
2552
- x_values = np .sort (x_values ).flatten ()
2553
- finite_x_values = np .extract (np .isfinite (x_values ), x_values )
2554
- if finite_x_values .size >= 1 :
2555
- x0 , x1 = (finite_x_values .min (), finite_x_values .max ())
2546
+ minimum_minpos = np .inf
2547
+ for ax in shared :
2548
+ x_values .extend (getattr (ax .dataLim , interval ))
2549
+ minimum_minpos = np .min (
2550
+ [minimum_minpos , getattr (ax .dataLim , minpos )]
2551
+ )
2552
+ x_values = np .extract (np .isfinite (x_values ), x_values )
2553
+ if x_values .size >= 1 :
2554
+ x0 , x1 = (x_values .min (), x_values .max ())
2556
2555
else :
2557
2556
x0 , x1 = (- np .inf , np .inf )
2558
2557
# If x0 and x1 are non finite, use the locator to figure out
@@ -2575,10 +2574,9 @@ def handle_single_axis(scale, autoscaleon, shared_axes, interval,
2575
2574
2576
2575
# Add the margin in figure space and then transform back, to handle
2577
2576
# non-linear scales.
2578
- minpos = np .min (minpos_values )
2579
2577
transform = axis .get_transform ()
2580
2578
inverse_trans = transform .inverted ()
2581
- x0 , x1 = axis ._scale .limit_range_for_scale (x0 , x1 , minpos )
2579
+ x0 , x1 = axis ._scale .limit_range_for_scale (x0 , x1 , minimum_minpos )
2582
2580
x0t , x1t = transform .transform ([x0 , x1 ])
2583
2581
delta = (x1t - x0t ) * margin
2584
2582
if not np .isfinite (delta ):
0 commit comments