From 6b2c71866b7c6e40d3d0f9a2ffb07ed0dd30d65d Mon Sep 17 00:00:00 2001 From: mromanie Date: Wed, 23 Jan 2019 12:22:52 +0100 Subject: [PATCH 1/3] Select RadioButtons by closest in position. Modify the selection criterion for RadioButtons so that the closest to the mouse click is activated. --- lib/matplotlib/widgets.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 8f7d27d4bc86..085e4be4886a 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -1058,11 +1058,12 @@ def _clicked(self, event): return xy = self.ax.transAxes.inverted().transform_point((event.x, event.y)) pclicked = np.array([xy[0], xy[1]]) + ii = {} for i, (p, t) in enumerate(zip(self.circles, self.labels)): if (t.get_window_extent().contains(event.x, event.y) or np.linalg.norm(pclicked - p.center) < p.radius): - self.set_active(i) - break + ii[i] = np.linalg.norm(pclicked - p.center) + self.set_active(min(ii, key=ii.get)) def set_active(self, index): """ From d551545d884b2520fa8f2ee41a59570985c840aa Mon Sep 17 00:00:00 2001 From: mromanie Date: Wed, 23 Jan 2019 13:50:13 +0100 Subject: [PATCH 2/3] Update widgets.py --- lib/matplotlib/widgets.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 085e4be4886a..d52bba462de8 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -1063,7 +1063,8 @@ def _clicked(self, event): if (t.get_window_extent().contains(event.x, event.y) or np.linalg.norm(pclicked - p.center) < p.radius): ii[i] = np.linalg.norm(pclicked - p.center) - self.set_active(min(ii, key=ii.get)) + if len(ii) > 0: + self.set_active(min(ii, key=ii.get)) def set_active(self, index): """ From 282a6cf63072edea691653e0a8d36a7c0952c42c Mon Sep 17 00:00:00 2001 From: mromanie Date: Thu, 24 Jan 2019 08:56:47 +0100 Subject: [PATCH 3/3] Update widgets.py @timhoffm Done! --- lib/matplotlib/widgets.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index d52bba462de8..9e7d5015bf16 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -1058,13 +1058,14 @@ def _clicked(self, event): return xy = self.ax.transAxes.inverted().transform_point((event.x, event.y)) pclicked = np.array([xy[0], xy[1]]) - ii = {} + distances = {} for i, (p, t) in enumerate(zip(self.circles, self.labels)): if (t.get_window_extent().contains(event.x, event.y) or np.linalg.norm(pclicked - p.center) < p.radius): - ii[i] = np.linalg.norm(pclicked - p.center) - if len(ii) > 0: - self.set_active(min(ii, key=ii.get)) + distances[i] = np.linalg.norm(pclicked - p.center) + if len(distances) > 0: + closest = min(distances, key=distances.get) + self.set_active(closest) def set_active(self, index): """