From 2d9fded786056fcb9bc6e50c727a74c7748a2397 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Wed, 11 Oct 2017 00:28:19 -0700 Subject: [PATCH 1/2] Minor cleanups to Axes._drag_pan. --- lib/matplotlib/axes/_base.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index 00cc9ee7aa4a..c1d91781624c 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,23 +3812,20 @@ 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 From b848e8a88b7bfcc354a18b9a01e92da2b80cc568 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Thu, 12 Oct 2017 16:32:15 -0700 Subject: [PATCH 2/2] Ignore invalid limits in pan. --- lib/matplotlib/axes/_base.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index c1d91781624c..08dfb51b0705 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -3830,8 +3830,12 @@ def format_deltas(key, dx, dy): 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):