From 4b872b1da9fec19b685777ebcfa0f61c84ddee37 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Mon, 23 Oct 2017 10:11:04 +0100 Subject: [PATCH] Backport PR #9363: Allow invalid limits when panning --- lib/matplotlib/axes/_base.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index 00cc9ee7aa4a..08dfb51b0705 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -3803,7 +3803,7 @@ def format_deltas(key, dx, dy): dy = dy / abs(dy) * abs(dx) else: dx = dx / abs(dx) * abs(dy) - return (dx, dy) + return dx, dy p = self._pan_start dx = x - p.x @@ -3812,29 +3812,30 @@ def format_deltas(key, dx, dy): return if button == 1: dx, dy = format_deltas(key, dx, dy) - result = p.bbox.translated(-dx, -dy) \ - .transformed(p.trans_inverse) + result = p.bbox.translated(-dx, -dy).transformed(p.trans_inverse) elif button == 3: try: - dx = -dx / float(self.bbox.width) - dy = -dy / float(self.bbox.height) + dx = -dx / self.bbox.width + dy = -dy / self.bbox.height dx, dy = format_deltas(key, dx, dy) if self.get_aspect() != 'auto': - dx = 0.5 * (dx + dy) - dy = dx - + dx = dy = 0.5 * (dx + dy) alpha = np.power(10.0, (dx, dy)) start = np.array([p.x, p.y]) oldpoints = p.lim.transformed(p.trans) newpoints = start + alpha * (oldpoints - start) - result = mtransforms.Bbox(newpoints) \ - .transformed(p.trans_inverse) + result = (mtransforms.Bbox(newpoints) + .transformed(p.trans_inverse)) except OverflowError: warnings.warn('Overflow while panning') return - self.set_xlim(*result.intervalx) - self.set_ylim(*result.intervaly) + valid = np.isfinite(result.transformed(p.trans)) + points = result.get_points().astype(object) + # Just ignore invalid limits (typically, underflow in log-scale). + points[~valid] = None + self.set_xlim(points[:, 0]) + self.set_ylim(points[:, 1]) @cbook.deprecated("2.1") def get_cursor_props(self):