From db6f29312d14a75b0d3fdf0c76d1711ab5f35e9b Mon Sep 17 00:00:00 2001 From: BISAL SINGH NAYAL Date: Thu, 1 Jul 2021 17:45:31 +0100 Subject: [PATCH 01/10] Added a public API "update_range" to Slider widget --- lib/matplotlib/tests/test_widgets.py | 6 ++++++ lib/matplotlib/widgets.py | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index e522591dd149..bf6258822bbc 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -266,6 +266,12 @@ def test_slider_valmin_valmax(): valinit=25.0) assert slider.val == slider.valmax +def test_slider_update_valmin_valmax(): + fig, ax = plt.subplots() + slider = widgets.Slider(ax=ax, label='', valmin=0.0, valmax=24.0, + valinit=10.0) + slider.update_range(vmin=20, vmax=50) + assert slider.val == slider.valmin def test_slider_horizontal_vertical(): fig, ax = plt.subplots() diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 6963ed31ed81..dd91c019cd58 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -501,6 +501,24 @@ def reset(self): if self.val != self.valinit: self.set_val(self.valinit) + def update_range(self, vmin = None, vmax = None): + """Update the range of the slider""" + if not vmin and not vmax: + raise ValueError( + (f"Argument vmin ({type(vmin)}) has no value" + f"Argument vmax ({type(vmax)}) has no value")) + if vmin: + self.valmin = vmin + if vmax: + self.valmax = vmax + self.val = self._value_in_bounds(self.valinit) + if self.orientation == 'vertical': + self.ax.set_ylim((self.valmin, self.valmax)) + self.hline.set_ydata(self.val) + else: + self.ax.set_xlim((self.valmin, self.valmax)) + self.vline.set_xdata(self.val) + class CheckButtons(AxesWidget): r""" From f4b25d8ba08cad4c535bcfa64b899c0421775fc1 Mon Sep 17 00:00:00 2001 From: BISAL SINGH NAYAL Date: Mon, 5 Jul 2021 22:35:36 +0100 Subject: [PATCH 02/10] Solved issues shown by flakes --- lib/matplotlib/tests/test_widgets.py | 1 + lib/matplotlib/widgets.py | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index e80d9e32fef0..d3bbc831b855 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -417,6 +417,7 @@ def test_slider_valmin_valmax(): valinit=25.0) assert slider.val == slider.valmax + def test_slider_update_valmin_valmax(): fig, ax = plt.subplots() slider = widgets.Slider(ax=ax, label='', valmin=0.0, valmax=24.0, diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 01e17246a088..f8f6fbcef8bf 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -809,16 +809,16 @@ def on_changed(self, func): """ return self._observers.connect('changed', lambda val: func(val)) - def update_range(self, vmin = None, vmax = None): + def update_range(self, vmin=None, vmax=None): """Update the range of the slider""" if not vmin and not vmax: raise ValueError( (f"Argument vmin ({type(vmin)}) has no value" - f"Argument vmax ({type(vmax)}) has no value")) + f"Argument vmax ({type(vmax)}) has no value")) if vmin: self.valmin = vmin if vmax: - self.valmax = vmax + self.valmax = vmax self.val = self._value_in_bounds(self.valinit) if self.orientation == 'vertical': self.ax.set_ylim((self.valmin, self.valmax)) From c0bcb22da95d71ad37c0225eedf54222202f9f32 Mon Sep 17 00:00:00 2001 From: BISAL SINGH NAYAL Date: Thu, 1 Jul 2021 17:45:31 +0100 Subject: [PATCH 03/10] Added a public API "update_range" to Slider widget --- lib/matplotlib/tests/test_widgets.py | 6 ++++++ lib/matplotlib/widgets.py | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index 0b33a682a50a..e80d9e32fef0 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -417,6 +417,12 @@ def test_slider_valmin_valmax(): valinit=25.0) assert slider.val == slider.valmax +def test_slider_update_valmin_valmax(): + fig, ax = plt.subplots() + slider = widgets.Slider(ax=ax, label='', valmin=0.0, valmax=24.0, + valinit=10.0) + slider.update_range(vmin=20, vmax=50) + assert slider.val == slider.valmin def test_slider_valstep_snapping(): fig, ax = plt.subplots() diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 50cef2f2c01e..01e17246a088 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -809,6 +809,24 @@ def on_changed(self, func): """ return self._observers.connect('changed', lambda val: func(val)) + def update_range(self, vmin = None, vmax = None): + """Update the range of the slider""" + if not vmin and not vmax: + raise ValueError( + (f"Argument vmin ({type(vmin)}) has no value" + f"Argument vmax ({type(vmax)}) has no value")) + if vmin: + self.valmin = vmin + if vmax: + self.valmax = vmax + self.val = self._value_in_bounds(self.valinit) + if self.orientation == 'vertical': + self.ax.set_ylim((self.valmin, self.valmax)) + self.hline.set_ydata(self.val) + else: + self.ax.set_xlim((self.valmin, self.valmax)) + self.vline.set_xdata(self.val) + class CheckButtons(AxesWidget): r""" From f024dffc7757ee189d2fec9362fa7f623d43958f Mon Sep 17 00:00:00 2001 From: BISAL SINGH NAYAL Date: Mon, 5 Jul 2021 22:35:36 +0100 Subject: [PATCH 04/10] Solved issues shown by flakes --- lib/matplotlib/tests/test_widgets.py | 1 + lib/matplotlib/widgets.py | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index e80d9e32fef0..d3bbc831b855 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -417,6 +417,7 @@ def test_slider_valmin_valmax(): valinit=25.0) assert slider.val == slider.valmax + def test_slider_update_valmin_valmax(): fig, ax = plt.subplots() slider = widgets.Slider(ax=ax, label='', valmin=0.0, valmax=24.0, diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 01e17246a088..f8f6fbcef8bf 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -809,16 +809,16 @@ def on_changed(self, func): """ return self._observers.connect('changed', lambda val: func(val)) - def update_range(self, vmin = None, vmax = None): + def update_range(self, vmin=None, vmax=None): """Update the range of the slider""" if not vmin and not vmax: raise ValueError( (f"Argument vmin ({type(vmin)}) has no value" - f"Argument vmax ({type(vmax)}) has no value")) + f"Argument vmax ({type(vmax)}) has no value")) if vmin: self.valmin = vmin if vmax: - self.valmax = vmax + self.valmax = vmax self.val = self._value_in_bounds(self.valinit) if self.orientation == 'vertical': self.ax.set_ylim((self.valmin, self.valmax)) From ad59d5a2f0e6f381a7438df707dedcf670df8d3c Mon Sep 17 00:00:00 2001 From: BISAL SINGH NAYAL Date: Tue, 6 Jul 2021 19:05:15 +0100 Subject: [PATCH 05/10] Worked on the given code review comments --- lib/matplotlib/tests/test_widgets.py | 43 ++++++++++++++++++++++++---- lib/matplotlib/widgets.py | 37 ++++++++++++------------ 2 files changed, 57 insertions(+), 23 deletions(-) diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index d3bbc831b855..fef0b6e49c1d 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -418,12 +418,45 @@ def test_slider_valmin_valmax(): assert slider.val == slider.valmax -def test_slider_update_valmin_valmax(): +def test_slider_set_limits(): fig, ax = plt.subplots() - slider = widgets.Slider(ax=ax, label='', valmin=0.0, valmax=24.0, - valinit=10.0) - slider.update_range(vmin=20, vmax=50) - assert slider.val == slider.valmin + slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, + valinit=15.0) + slider.set_limits(vmin=10, vmax=50) + assert slider.valinit == 15 + assert slider.valmax == 50 + assert slider.valmin == 10 + + slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, + valinit=15.0) + slider.set_limits(vmin=20, vmax=40) + assert slider.valinit == 15 + assert slider.valmax == 40 + assert slider.valmin == 20 + + slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, + valinit=15.0) + slider.val = 20 + slider.set_limits(vmin=30, vmax=50) + assert slider.val == 30 + assert slider.valmax == 50 + assert slider.valmin == 30 + + slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, + valinit=15.0) + slider.val = 20 + slider.set_limits(vmin=1, vmax=7) + assert slider.val == 7 + assert slider.valmax == 7 + assert slider.valmin == 1 + + slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, + valinit=15.0) + with pytest.raises(ValueError): + slider.set_limits() + assert slider.valmax == 40 + assert slider.valmin == 10 + def test_slider_valstep_snapping(): fig, ax = plt.subplots() diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index f8f6fbcef8bf..e646feacce7f 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -529,6 +529,25 @@ def on_changed(self, func): """ return self._observers.connect('changed', lambda val: func(val)) + def set_limits(self, vmin=None, vmax=None): + """Update the range of the slider""" + if vmin is None and vmax is None: + raise ValueError( + (f"Argument vmin ({type(vmin)}) has no value and " + f"Argument vmax ({type(vmax)}) has no value")) + return + if vmin is not None: + self.valmin = vmin + if vmax is not None: + self.valmax = vmax + self.val = self._value_in_bounds(self.val) + if self.orientation == 'vertical': + self.ax.set_ylim((self.valmin, self.valmax)) + self.hline.set_ydata(self.valinit) + else: + self.ax.set_xlim((self.valmin, self.valmax)) + self.vline.set_xdata(self.valinit) + class RangeSlider(SliderBase): """ @@ -809,24 +828,6 @@ def on_changed(self, func): """ return self._observers.connect('changed', lambda val: func(val)) - def update_range(self, vmin=None, vmax=None): - """Update the range of the slider""" - if not vmin and not vmax: - raise ValueError( - (f"Argument vmin ({type(vmin)}) has no value" - f"Argument vmax ({type(vmax)}) has no value")) - if vmin: - self.valmin = vmin - if vmax: - self.valmax = vmax - self.val = self._value_in_bounds(self.valinit) - if self.orientation == 'vertical': - self.ax.set_ylim((self.valmin, self.valmax)) - self.hline.set_ydata(self.val) - else: - self.ax.set_xlim((self.valmin, self.valmax)) - self.vline.set_xdata(self.val) - class CheckButtons(AxesWidget): r""" From fcfa937ec405dfa0c7d260a8af6ef2aac756d5b3 Mon Sep 17 00:00:00 2001 From: BISAL SINGH NAYAL Date: Tue, 13 Jul 2021 11:20:22 +0100 Subject: [PATCH 06/10] Worked on the review comments: 1. Add a set_limits function to the SliderBase class --- lib/matplotlib/tests/test_widgets.py | 5 ++--- lib/matplotlib/widgets.py | 30 +++++++++++++++++----------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index fef0b6e49c1d..86837c883366 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -430,7 +430,7 @@ def test_slider_set_limits(): slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, valinit=15.0) slider.set_limits(vmin=20, vmax=40) - assert slider.valinit == 15 + assert slider.valinit == 20 assert slider.valmax == 40 assert slider.valmin == 20 @@ -452,8 +452,7 @@ def test_slider_set_limits(): slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, valinit=15.0) - with pytest.raises(ValueError): - slider.set_limits() + slider.set_limits() assert slider.valmax == 40 assert slider.valmin == 10 diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index e646feacce7f..c251d40d1be6 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -306,6 +306,19 @@ def reset(self): if self.val != self.valinit: self.set_val(self.valinit) + def set_limits(self, vmin=None, vmax=None): + """Update the limits of the slider.""" + if vmin is None and vmax is None: + return + if vmin is not None: + self.valmin = vmin + if vmax is not None: + self.valmax = vmax + if self.orientation == 'vertical': + self.ax.set_ylim((self.valmin, self.valmax)) + else: + self.ax.set_xlim((self.valmin, self.valmax)) + class Slider(SliderBase): """ @@ -530,22 +543,15 @@ def on_changed(self, func): return self._observers.connect('changed', lambda val: func(val)) def set_limits(self, vmin=None, vmax=None): - """Update the range of the slider""" - if vmin is None and vmax is None: - raise ValueError( - (f"Argument vmin ({type(vmin)}) has no value and " - f"Argument vmax ({type(vmax)}) has no value")) - return - if vmin is not None: - self.valmin = vmin - if vmax is not None: - self.valmax = vmax + """Update the limits of the slider.""" + super().set_limits(vmin=vmin, vmax=vmax) self.val = self._value_in_bounds(self.val) + # if we reset the slider after updating the limits then we should have + # the proper valinit value + self.valinit = self._value_in_bounds(self.valinit) if self.orientation == 'vertical': - self.ax.set_ylim((self.valmin, self.valmax)) self.hline.set_ydata(self.valinit) else: - self.ax.set_xlim((self.valmin, self.valmax)) self.vline.set_xdata(self.valinit) From 80cadb18de445d377c72e81f9edcb2d174f89a16 Mon Sep 17 00:00:00 2001 From: BISAL SINGH NAYAL Date: Thu, 1 Jul 2021 17:45:31 +0100 Subject: [PATCH 07/10] Added a public API "update_range" to Slider widget --- lib/matplotlib/tests/test_widgets.py | 6 ++++++ lib/matplotlib/widgets.py | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index d3bbc831b855..9fc0c52e92e1 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -417,6 +417,12 @@ def test_slider_valmin_valmax(): valinit=25.0) assert slider.val == slider.valmax +def test_slider_update_valmin_valmax(): + fig, ax = plt.subplots() + slider = widgets.Slider(ax=ax, label='', valmin=0.0, valmax=24.0, + valinit=10.0) + slider.update_range(vmin=20, vmax=50) + assert slider.val == slider.valmin def test_slider_update_valmin_valmax(): fig, ax = plt.subplots() diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index f8f6fbcef8bf..1b045143e132 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -827,6 +827,24 @@ def update_range(self, vmin=None, vmax=None): self.ax.set_xlim((self.valmin, self.valmax)) self.vline.set_xdata(self.val) + def update_range(self, vmin = None, vmax = None): + """Update the range of the slider""" + if not vmin and not vmax: + raise ValueError( + (f"Argument vmin ({type(vmin)}) has no value" + f"Argument vmax ({type(vmax)}) has no value")) + if vmin: + self.valmin = vmin + if vmax: + self.valmax = vmax + self.val = self._value_in_bounds(self.valinit) + if self.orientation == 'vertical': + self.ax.set_ylim((self.valmin, self.valmax)) + self.hline.set_ydata(self.val) + else: + self.ax.set_xlim((self.valmin, self.valmax)) + self.vline.set_xdata(self.val) + class CheckButtons(AxesWidget): r""" From 24732baeb30bf08f0dc99a97d5deee12b8832100 Mon Sep 17 00:00:00 2001 From: BISAL SINGH NAYAL Date: Mon, 5 Jul 2021 22:35:36 +0100 Subject: [PATCH 08/10] Solved issues shown by flakes --- lib/matplotlib/tests/test_widgets.py | 1 + lib/matplotlib/widgets.py | 18 ------------------ 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index 9fc0c52e92e1..431126d32357 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -417,6 +417,7 @@ def test_slider_valmin_valmax(): valinit=25.0) assert slider.val == slider.valmax + def test_slider_update_valmin_valmax(): fig, ax = plt.subplots() slider = widgets.Slider(ax=ax, label='', valmin=0.0, valmax=24.0, diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 1b045143e132..f8f6fbcef8bf 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -827,24 +827,6 @@ def update_range(self, vmin=None, vmax=None): self.ax.set_xlim((self.valmin, self.valmax)) self.vline.set_xdata(self.val) - def update_range(self, vmin = None, vmax = None): - """Update the range of the slider""" - if not vmin and not vmax: - raise ValueError( - (f"Argument vmin ({type(vmin)}) has no value" - f"Argument vmax ({type(vmax)}) has no value")) - if vmin: - self.valmin = vmin - if vmax: - self.valmax = vmax - self.val = self._value_in_bounds(self.valinit) - if self.orientation == 'vertical': - self.ax.set_ylim((self.valmin, self.valmax)) - self.hline.set_ydata(self.val) - else: - self.ax.set_xlim((self.valmin, self.valmax)) - self.vline.set_xdata(self.val) - class CheckButtons(AxesWidget): r""" From a030ebc0a305ca14c3654e21a801881469315109 Mon Sep 17 00:00:00 2001 From: BISAL SINGH NAYAL Date: Tue, 6 Jul 2021 19:05:15 +0100 Subject: [PATCH 09/10] Worked on the given code review comments --- lib/matplotlib/tests/test_widgets.py | 43 ++++++++++++++++++++++++---- lib/matplotlib/widgets.py | 37 ++++++++++++------------ 2 files changed, 57 insertions(+), 23 deletions(-) diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index 431126d32357..aa24b97759ef 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -418,12 +418,45 @@ def test_slider_valmin_valmax(): assert slider.val == slider.valmax -def test_slider_update_valmin_valmax(): +def test_slider_set_limits(): fig, ax = plt.subplots() - slider = widgets.Slider(ax=ax, label='', valmin=0.0, valmax=24.0, - valinit=10.0) - slider.update_range(vmin=20, vmax=50) - assert slider.val == slider.valmin + slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, + valinit=15.0) + slider.set_limits(vmin=10, vmax=50) + assert slider.valinit == 15 + assert slider.valmax == 50 + assert slider.valmin == 10 + + slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, + valinit=15.0) + slider.set_limits(vmin=20, vmax=40) + assert slider.valinit == 15 + assert slider.valmax == 40 + assert slider.valmin == 20 + + slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, + valinit=15.0) + slider.val = 20 + slider.set_limits(vmin=30, vmax=50) + assert slider.val == 30 + assert slider.valmax == 50 + assert slider.valmin == 30 + + slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, + valinit=15.0) + slider.val = 20 + slider.set_limits(vmin=1, vmax=7) + assert slider.val == 7 + assert slider.valmax == 7 + assert slider.valmin == 1 + + slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, + valinit=15.0) + with pytest.raises(ValueError): + slider.set_limits() + assert slider.valmax == 40 + assert slider.valmin == 10 + def test_slider_update_valmin_valmax(): fig, ax = plt.subplots() diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index f8f6fbcef8bf..e646feacce7f 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -529,6 +529,25 @@ def on_changed(self, func): """ return self._observers.connect('changed', lambda val: func(val)) + def set_limits(self, vmin=None, vmax=None): + """Update the range of the slider""" + if vmin is None and vmax is None: + raise ValueError( + (f"Argument vmin ({type(vmin)}) has no value and " + f"Argument vmax ({type(vmax)}) has no value")) + return + if vmin is not None: + self.valmin = vmin + if vmax is not None: + self.valmax = vmax + self.val = self._value_in_bounds(self.val) + if self.orientation == 'vertical': + self.ax.set_ylim((self.valmin, self.valmax)) + self.hline.set_ydata(self.valinit) + else: + self.ax.set_xlim((self.valmin, self.valmax)) + self.vline.set_xdata(self.valinit) + class RangeSlider(SliderBase): """ @@ -809,24 +828,6 @@ def on_changed(self, func): """ return self._observers.connect('changed', lambda val: func(val)) - def update_range(self, vmin=None, vmax=None): - """Update the range of the slider""" - if not vmin and not vmax: - raise ValueError( - (f"Argument vmin ({type(vmin)}) has no value" - f"Argument vmax ({type(vmax)}) has no value")) - if vmin: - self.valmin = vmin - if vmax: - self.valmax = vmax - self.val = self._value_in_bounds(self.valinit) - if self.orientation == 'vertical': - self.ax.set_ylim((self.valmin, self.valmax)) - self.hline.set_ydata(self.val) - else: - self.ax.set_xlim((self.valmin, self.valmax)) - self.vline.set_xdata(self.val) - class CheckButtons(AxesWidget): r""" From df26a4ce67161d1c37bac8f8d0d54c939c0cfbe8 Mon Sep 17 00:00:00 2001 From: BISAL SINGH NAYAL Date: Tue, 13 Jul 2021 11:20:22 +0100 Subject: [PATCH 10/10] Worked on the review comments: 1. Add a set_limits function to the SliderBase class --- lib/matplotlib/tests/test_widgets.py | 5 ++--- lib/matplotlib/widgets.py | 30 +++++++++++++++++----------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index aa24b97759ef..0d9ff2460caa 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -430,7 +430,7 @@ def test_slider_set_limits(): slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, valinit=15.0) slider.set_limits(vmin=20, vmax=40) - assert slider.valinit == 15 + assert slider.valinit == 20 assert slider.valmax == 40 assert slider.valmin == 20 @@ -452,8 +452,7 @@ def test_slider_set_limits(): slider = widgets.Slider(ax=ax, label='', valmin=10.0, valmax=40.0, valinit=15.0) - with pytest.raises(ValueError): - slider.set_limits() + slider.set_limits() assert slider.valmax == 40 assert slider.valmin == 10 diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index e646feacce7f..c251d40d1be6 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -306,6 +306,19 @@ def reset(self): if self.val != self.valinit: self.set_val(self.valinit) + def set_limits(self, vmin=None, vmax=None): + """Update the limits of the slider.""" + if vmin is None and vmax is None: + return + if vmin is not None: + self.valmin = vmin + if vmax is not None: + self.valmax = vmax + if self.orientation == 'vertical': + self.ax.set_ylim((self.valmin, self.valmax)) + else: + self.ax.set_xlim((self.valmin, self.valmax)) + class Slider(SliderBase): """ @@ -530,22 +543,15 @@ def on_changed(self, func): return self._observers.connect('changed', lambda val: func(val)) def set_limits(self, vmin=None, vmax=None): - """Update the range of the slider""" - if vmin is None and vmax is None: - raise ValueError( - (f"Argument vmin ({type(vmin)}) has no value and " - f"Argument vmax ({type(vmax)}) has no value")) - return - if vmin is not None: - self.valmin = vmin - if vmax is not None: - self.valmax = vmax + """Update the limits of the slider.""" + super().set_limits(vmin=vmin, vmax=vmax) self.val = self._value_in_bounds(self.val) + # if we reset the slider after updating the limits then we should have + # the proper valinit value + self.valinit = self._value_in_bounds(self.valinit) if self.orientation == 'vertical': - self.ax.set_ylim((self.valmin, self.valmax)) self.hline.set_ydata(self.valinit) else: - self.ax.set_xlim((self.valmin, self.valmax)) self.vline.set_xdata(self.valinit) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy