From b82537a644590c0eccf2e3d8e202307d96bfbdba Mon Sep 17 00:00:00 2001 From: mromanie Date: Wed, 6 Feb 2019 09:18:41 +0100 Subject: [PATCH 1/2] Add possibility to have horizontal RadioButtons A new optional keyword argument 'layout_direction' is introduced to control it. The new parameter defaults to 'vertical' for backwards compatibility. --- .../next_whats_new/widget_horizontal.rst | 23 ++++++++++++ lib/matplotlib/tests/test_widgets.py | 6 ++-- lib/matplotlib/widgets.py | 35 +++++++++++++++---- lib/matplotlib/widgets.pyi | 1 + 4 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 doc/users/next_whats_new/widget_horizontal.rst diff --git a/doc/users/next_whats_new/widget_horizontal.rst b/doc/users/next_whats_new/widget_horizontal.rst new file mode 100644 index 000000000000..8785ed191bb7 --- /dev/null +++ b/doc/users/next_whats_new/widget_horizontal.rst @@ -0,0 +1,23 @@ +RadioButtons widget may now be laid out horizontally +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The `.RadioButtons` widget's primary layout direction may now be specified with +the *layout_direction* keyword argument: + +.. plot:: + :include-source: + + import matplotlib.pyplot as plt + from matplotlib.widgets import RadioButtons + + fig = plt.figure(figsize=(4, 2)) + + # Default orientation is vertical: + rbv = RadioButtons(fig.add_axes((0.05, 0.6, 0.2, 0.35)), + ('Radio 1', 'Radio 2', 'Radio 3'), + layout_direction='vertical') + + # Alternatively, a horizontal orientation may be used: + rbh = RadioButtons(fig.add_axes((0.3, 0.6, 0.6, 0.35)), + ('Radio 1', 'Radio 2', 'Radio 3'), + layout_direction='horizontal') diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index d559ad99ef0f..339a19919445 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -1097,8 +1097,10 @@ def test_TextBox(ax, toolbar): assert text_change_event.call_count == 3 -def test_RadioButtons(ax): - radio = widgets.RadioButtons(ax, ('Radio 1', 'Radio 2', 'Radio 3')) +@pytest.mark.parametrize('layout_direction', ['vertical', 'horizontal']) +def test_RadioButtons(ax, layout_direction): + radio = widgets.RadioButtons(ax, ('Radio 1', 'Radio 2', 'Radio 3'), + layout_direction=layout_direction) radio.set_active(1) assert radio.value_selected == 'Radio 2' assert radio.index_selected == 1 diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 5e4c52ed2478..2c5cfad2fcc9 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -1557,7 +1557,8 @@ class RadioButtons(AxesWidget): """ def __init__(self, ax, labels, active=0, activecolor=None, *, - useblit=True, label_props=None, radio_props=None): + useblit=True, label_props=None, radio_props=None, + layout_direction='vertical'): """ Add radio buttons to an `~.axes.Axes`. @@ -1593,9 +1594,16 @@ def __init__(self, ax, labels, active=0, activecolor=None, *, button. .. versionadded:: 3.7 + layout_direction : {'vertical', 'horizontal'} + The orientation of the buttons: 'vertical' places buttons from top + to bottom, 'horizontal' places buttons from left to right. + + .. versionadded:: 3.10 """ super().__init__(ax) + _api.check_in_list(['vertical', 'horizontal'], + layout_direction=layout_direction) _api.check_isinstance((dict, None), label_props=label_props, radio_props=radio_props) @@ -1619,17 +1627,32 @@ def __init__(self, ax, labels, active=0, activecolor=None, *, ax.set_yticks([]) ax.set_navigate(False) - ys = np.linspace(1, 0, len(labels) + 2)[1:-1] + if layout_direction == 'vertical': + # Place buttons from top to bottom with buttons at (0.15, y) and labels + # at (0.25, y), where y is evenly spaced within the Axes. + button_ys = label_ys = np.linspace(1, 0, len(labels) + 2)[1:-1] + button_xs = np.full_like(button_ys, 0.15) + label_xs = np.full_like(label_ys, 0.25) + label_ha = 'left' + label_va = 'center' + else: + # Place buttons from left to right with buttons at (x, 0.15) and labels + # at (x, 0.25), where x is evenly spaced within the Axes. + button_xs = label_xs = np.linspace(0, 1, len(labels) + 2)[1:-1] + button_ys = np.full_like(button_xs, 0.15) + label_ys = np.full_like(label_xs, 0.25) + label_ha = 'center' + label_va = 'bottom' self._useblit = useblit and self.canvas.supports_blit self._background = None label_props = _expand_text_props(label_props) self.labels = [ - ax.text(0.25, y, label, transform=ax.transAxes, - horizontalalignment="left", verticalalignment="center", + ax.text(x, y, label, transform=ax.transAxes, + horizontalalignment=label_ha, verticalalignment=label_va, **props) - for y, label, props in zip(ys, labels, label_props)] + for x, y, label, props in zip(label_xs, label_ys, labels, label_props)] text_size = np.array([text.get_fontsize() for text in self.labels]) / 2 radio_props = { @@ -1642,7 +1665,7 @@ def __init__(self, ax, labels, active=0, activecolor=None, *, radio_props.setdefault('edgecolor', radio_props.get('color', 'black')) radio_props.setdefault('facecolor', radio_props.pop('color', activecolor)) - self._buttons = ax.scatter([.15] * len(ys), ys, **radio_props) + self._buttons = ax.scatter(button_xs, button_ys, **radio_props) # The user may have passed custom colours in radio_props, so we need to # create the radios, and modify the visibility after getting whatever # the user set. diff --git a/lib/matplotlib/widgets.pyi b/lib/matplotlib/widgets.pyi index f5de6cb62414..5b0eb5b2fdcd 100644 --- a/lib/matplotlib/widgets.pyi +++ b/lib/matplotlib/widgets.pyi @@ -210,6 +210,7 @@ class RadioButtons(AxesWidget): useblit: bool = ..., label_props: dict[str, Any] | Sequence[dict[str, Any]] | None = ..., radio_props: dict[str, Any] | None = ..., + layout_direction: Literal["vertical", "horizontal"] = ..., ) -> None: ... def set_label_props(self, props: dict[str, Any]) -> None: ... def set_radio_props(self, props: dict[str, Any]) -> None: ... From 9a5eb5b1e6e77423fcf5b7eb978d3579a7661844 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Tue, 19 Mar 2024 00:32:09 -0400 Subject: [PATCH 2/2] Add support for horizontal CheckButtons --- .../next_whats_new/widget_horizontal.rst | 16 ++++-- .../test_widgets/check_radio_buttons.png | Bin 23386 -> 28230 bytes lib/matplotlib/tests/test_widgets.py | 54 +++++++++++++----- lib/matplotlib/widgets.py | 37 +++++++++--- lib/matplotlib/widgets.pyi | 1 + 5 files changed, 83 insertions(+), 25 deletions(-) diff --git a/doc/users/next_whats_new/widget_horizontal.rst b/doc/users/next_whats_new/widget_horizontal.rst index 8785ed191bb7..896bec7a9679 100644 --- a/doc/users/next_whats_new/widget_horizontal.rst +++ b/doc/users/next_whats_new/widget_horizontal.rst @@ -1,14 +1,14 @@ -RadioButtons widget may now be laid out horizontally -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CheckButtons / RadioButtons widget may now be laid out horizontally +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The `.RadioButtons` widget's primary layout direction may now be specified with -the *layout_direction* keyword argument: +The `.CheckButtons` and `.RadioButtons` widget's primary layout direction may +now be specified with the *layout_direction* keyword argument: .. plot:: :include-source: import matplotlib.pyplot as plt - from matplotlib.widgets import RadioButtons + from matplotlib.widgets import CheckButtons, RadioButtons fig = plt.figure(figsize=(4, 2)) @@ -16,8 +16,14 @@ the *layout_direction* keyword argument: rbv = RadioButtons(fig.add_axes((0.05, 0.6, 0.2, 0.35)), ('Radio 1', 'Radio 2', 'Radio 3'), layout_direction='vertical') + cbv = CheckButtons(fig.add_axes((0.05, 0.2, 0.2, 0.35)), + ('Check 1', 'Check 2', 'Check 3'), + layout_direction='vertical') # Alternatively, a horizontal orientation may be used: rbh = RadioButtons(fig.add_axes((0.3, 0.6, 0.6, 0.35)), ('Radio 1', 'Radio 2', 'Radio 3'), layout_direction='horizontal') + cbh = CheckButtons(fig.add_axes((0.3, 0.2, 0.6, 0.35)), + ('Check 1', 'Check 2', 'Check 3'), + layout_direction='horizontal') diff --git a/lib/matplotlib/tests/baseline_images/test_widgets/check_radio_buttons.png b/lib/matplotlib/tests/baseline_images/test_widgets/check_radio_buttons.png index f0d5023008cabd1296c3cbd30447476c7608cb0d..2576dacc6bcda283d2c718c9dc300001c58d068a 100644 GIT binary patch literal 28230 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%0ADJ)ar9_c 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 None: ... def set_label_props(self, props: dict[str, Any]) -> None: ... def set_frame_props(self, props: dict[str, Any]) -> None: ...