From e28514c1e434ec1ebbcbd8ae909a731cc4eb1bf4 Mon Sep 17 00:00:00 2001 From: "Jesse B. Hopkins" Date: Mon, 7 Aug 2017 10:48:40 -0400 Subject: [PATCH 1/4] Fixed a bug where the zoom rubberband didn't display properly on macOS when using the wxagg backend and multiple subfigures. --- lib/matplotlib/backends/backend_wx.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/matplotlib/backends/backend_wx.py b/lib/matplotlib/backends/backend_wx.py index f6bc3d23a50f..1481729e239b 100644 --- a/lib/matplotlib/backends/backend_wx.py +++ b/lib/matplotlib/backends/backend_wx.py @@ -1614,10 +1614,12 @@ def press(self, event): if not self.retinaFix: self.wxoverlay = wx.Overlay() else: - self.savedRetinaImage = self.canvas.copy_from_bbox( - self.canvas.figure.gca().bbox) - self.zoomStartX = event.xdata - self.zoomStartY = event.ydata + if event.inaxes is not None: + self.savedRetinaImage = self.canvas.copy_from_bbox( + event.inaxes.bbox) + self.zoomStartX = event.xdata + self.zoomStartY = event.ydata + self.zoomAxes = event.inaxes def release(self, event): if self._active == 'ZOOM': @@ -1643,10 +1645,10 @@ def draw_rubberband(self, event, x0, y0, x1, y1): Y0, Y1 = self.zoomStartY, event.ydata lineX = (X0, X0, X1, X1, X0) lineY = (Y0, Y1, Y1, Y0, Y0) - self.prevZoomRect = self.canvas.figure.gca().plot( + self.prevZoomRect = self.zoomAxes.plot( lineX, lineY, '-', color=rubberBandColor) - self.canvas.figure.gca().draw_artist(self.prevZoomRect[0]) - self.canvas.blit(self.canvas.figure.gca().bbox) + self.zoomAxes.draw_artist(self.prevZoomRect[0]) + self.canvas.blit(self.zoomAxes.bbox) return # Use an Overlay to draw a rubberband-like bounding box. From 97773b00f1f9fa85d78ff4444136d5efea986593 Mon Sep 17 00:00:00 2001 From: "Jesse B. Hopkins" Date: Mon, 7 Aug 2017 11:37:06 -0400 Subject: [PATCH 2/4] Made zoomAxes private, released the axes reference when the rubberband is done. --- lib/matplotlib/backends/backend_wx.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/backends/backend_wx.py b/lib/matplotlib/backends/backend_wx.py index 1481729e239b..5fcd4f75f4d4 100644 --- a/lib/matplotlib/backends/backend_wx.py +++ b/lib/matplotlib/backends/backend_wx.py @@ -1619,7 +1619,7 @@ def press(self, event): event.inaxes.bbox) self.zoomStartX = event.xdata self.zoomStartY = event.ydata - self.zoomAxes = event.inaxes + self._zoomAxes = event.inaxes def release(self, event): if self._active == 'ZOOM': @@ -1633,6 +1633,7 @@ def release(self, event): if self.prevZoomRect: self.prevZoomRect.pop(0).remove() self.prevZoomRect = None + self._zoomAxes = None def draw_rubberband(self, event, x0, y0, x1, y1): if self.retinaFix: # On Macs, use the following code @@ -1645,10 +1646,10 @@ def draw_rubberband(self, event, x0, y0, x1, y1): Y0, Y1 = self.zoomStartY, event.ydata lineX = (X0, X0, X1, X1, X0) lineY = (Y0, Y1, Y1, Y0, Y0) - self.prevZoomRect = self.zoomAxes.plot( + self.prevZoomRect = self._zoomAxes.plot( lineX, lineY, '-', color=rubberBandColor) - self.zoomAxes.draw_artist(self.prevZoomRect[0]) - self.canvas.blit(self.zoomAxes.bbox) + self._zoomAxes.draw_artist(self.prevZoomRect[0]) + self.canvas.blit(self._zoomAxes.bbox) return # Use an Overlay to draw a rubberband-like bounding box. From 59a26b8bf38de5f9ef77c6d083f8535d90970d54 Mon Sep 17 00:00:00 2001 From: "Jesse B. Hopkins" Date: Mon, 7 Aug 2017 11:41:49 -0400 Subject: [PATCH 3/4] Made zoomAxes public again. --- lib/matplotlib/backends/backend_wx.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/matplotlib/backends/backend_wx.py b/lib/matplotlib/backends/backend_wx.py index 5fcd4f75f4d4..3055ca3e8daf 100644 --- a/lib/matplotlib/backends/backend_wx.py +++ b/lib/matplotlib/backends/backend_wx.py @@ -1619,7 +1619,7 @@ def press(self, event): event.inaxes.bbox) self.zoomStartX = event.xdata self.zoomStartY = event.ydata - self._zoomAxes = event.inaxes + self.zoomAxes = event.inaxes def release(self, event): if self._active == 'ZOOM': @@ -1633,7 +1633,7 @@ def release(self, event): if self.prevZoomRect: self.prevZoomRect.pop(0).remove() self.prevZoomRect = None - self._zoomAxes = None + self.zoomAxes = None def draw_rubberband(self, event, x0, y0, x1, y1): if self.retinaFix: # On Macs, use the following code @@ -1646,10 +1646,10 @@ def draw_rubberband(self, event, x0, y0, x1, y1): Y0, Y1 = self.zoomStartY, event.ydata lineX = (X0, X0, X1, X1, X0) lineY = (Y0, Y1, Y1, Y0, Y0) - self.prevZoomRect = self._zoomAxes.plot( + self.prevZoomRect = self.zoomAxes.plot( lineX, lineY, '-', color=rubberBandColor) - self._zoomAxes.draw_artist(self.prevZoomRect[0]) - self.canvas.blit(self._zoomAxes.bbox) + self.zoomAxes.draw_artist(self.prevZoomRect[0]) + self.canvas.blit(self.zoomAxes.bbox) return # Use an Overlay to draw a rubberband-like bounding box. From cb58d8e7981d9707ebbb66e3c439cfa827d5f1f9 Mon Sep 17 00:00:00 2001 From: "Jesse B. Hopkins" Date: Mon, 7 Aug 2017 12:18:03 -0400 Subject: [PATCH 4/4] Made zoomaxes release consistent with prevZoomRect release. --- lib/matplotlib/backends/backend_wx.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/matplotlib/backends/backend_wx.py b/lib/matplotlib/backends/backend_wx.py index 3055ca3e8daf..f7df0707e637 100644 --- a/lib/matplotlib/backends/backend_wx.py +++ b/lib/matplotlib/backends/backend_wx.py @@ -1633,6 +1633,7 @@ def release(self, event): if self.prevZoomRect: self.prevZoomRect.pop(0).remove() self.prevZoomRect = None + if self.zoomAxes: self.zoomAxes = None def draw_rubberband(self, event, x0, y0, x1, y1):