diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index ea9bb7a2c228..61b161642fef 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -2272,7 +2272,14 @@ def handle_single_axis(scale, autoscaleon, shared_axes, interval, # ignore non-finite data limits if good limits exist finite_dl = [d for d in dl if np.isfinite(d).all()] if len(finite_dl): + # if finite limits exist for atleast one axis (and the other is infinite), restore the + # finite limits + x_finite = [d for d in dl if (np.isfinite(d.intervalx).all() and (d not in finite_dl))] + y_finite = [d for d in dl if (np.isfinite(d.intervaly).all() and (d not in finite_dl))] + dl = finite_dl + dl.extend(x_finite) + dl.extend(y_finite) bb = mtransforms.BboxBase.union(dl) x0, x1 = getattr(bb, interval) diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index 49b6a57e67ac..86b6f2a3ddc2 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -5134,3 +5134,18 @@ def test_minorticks_on(xscale, yscale): ax.set_xscale(xscale) ax.set_yscale(yscale) ax.minorticks_on() + + +def test_twinx_knows_limits(): + fig, ax = plt.subplots() + + ax.axvspan(1, 2) + xtwin = ax.twinx() + xtwin.plot([0, 0.5], [1, 2]) + # control axis + fig2, ax2 = plt.subplots() + + ax2.axvspan(1, 2) + ax2.plot([0, 0.5], [1, 2]) + + assert((xtwin.viewLim.intervalx == ax2.viewLim.intervalx).all())