-
-
Notifications
You must be signed in to change notification settings - Fork 7.9k
Horizontal radio buttons #13374
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Horizontal radio buttons #13374
Conversation
flake8 needs to pass 😉 https://travis-ci.org/matplotlib/matplotlib/jobs/489577517 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR @mromanie !
Here are a couple of comments. I'll do a more thorough review once these are addressed.
Can you in addition add a what's new entry? See doc/users/next_whats_new/README.rst
lib/matplotlib/widgets.py
Outdated
""" | ||
if orientation not in ['vertical', 'horizontal']: | ||
raise ValueError("Invalid RadioButton orientation: %s" % orientation) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add what are the possible values here?
Can you also add a mock test to make sure it runs, as well as a test to make sure this exception is raised properly.
I also think we need to update the examples to show case this (examples/widgets/radio_buttons.py)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have a shortcut function to check options like this and raise an appropriate error now, cbook._check_in_list
lib/matplotlib/widgets.py
Outdated
@@ -1007,7 +1007,12 @@ def __init__(self, ax, labels, active=0, activecolor='blue'): | |||
The index of the initially selected button. | |||
activecolor : color | |||
The color of the selected button. | |||
orientation : str | |||
The orientation of the buttons: 'vertical' (default), or 'horizontal'. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The keyword being a bit confusing here, I think it's worth detailing a bit more what orientation means (which is the set of radio buttons are on the same horizontal axis or vertical axis).
Sorry, something went wrong.
All reactions
For the failing flake8 test, I would suggest adding the check directly to your text editor. |
All reactions
Sorry, something went wrong.
Milestoning 3.2 as there has not been activity recently. @mromanie are you still interested to work on this? |
All reactions
Sorry, something went wrong.
@timhoffm Apologies for my inactivity. I am indeed still very much interested in working on this. In fact, I think I managed to do it properly by using patches.Ellipse instead of patches.Circle and stretching them to look circular using the aspects of the axes and figure. In this way, the entire surface of the buttons is sensitive, unlike the current implementation with patches.Circle. I still need to clean up the auto-scaling of the size of the symbols, which at the moment still results in the symbols to overlap under certain circumstances, and I'll submit the whole lot for review. Shall I use the same PR for this? |
All reactions
Sorry, something went wrong.
What about using a |
All reactions
Sorry, something went wrong.
@ImportanceOfBeingErnest I'm not familiar with
Plus a couple more things to make it backwards compatible. Like I said earlier, setting circle_radius to a fixed value is not always satisfactory and I' fine-tuning it. |
All reactions
Sorry, something went wrong.
...forgot to say, the condition to activate the Ellipse button is:
|
All reactions
Sorry, something went wrong.
If you plot a |
All reactions
-
👍 1 reaction
Sorry, something went wrong.
OK, thanks! All things considered, I would stick to the solution with Ellipse because:
|
All reactions
Sorry, something went wrong.
Not sure what the status is here. Since someone asked a question about horizontal buttons on stackoverflow, I thought it might be worth showing a solution over there: https://stackoverflow.com/questions/55095111/displaying-radio-buttons-horizontally-in-matplotlib/55102639#55102639 Of course this could also be used for this update. |
All reactions
Sorry, something went wrong.
This looks mostly done, but needs a rebase and a small tweak to the checks. The squashing is something that affects vertical buttons too, so could be a separate PR. |
All reactions
Sorry, something went wrong.
d6c2cbe
to
8ea3641
Compare
Selecting by closest button is now merged as #13268. Using a scatter plot to ensure circular buttons is merged as #24474. I pushed a rebase, dropping the old changes, fixed the review comments and adding a test/what's new entry. I also modified the implementation a bit so that it modifies the placement of the buttons instead of reversing the I'm also working on implementing the same change for |
All reactions
Sorry, something went wrong.
8ea3641
to
035517e
Compare
An example of how this looks may be found in the what's new entry: https://output.circle-artifacts.com/output/job/26b48f05-0be7-417a-b57e-305a60aa66b9/artifacts/0/doc/build/html/users/next_whats_new/widget_horizontal.html |
All reactions
Sorry, something went wrong.
035517e
to
f76df0a
Compare
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
|
||
The `.RadioButtons` widget's primary layout direction may now be specified with | ||
the *orientation* keyword argument: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is orientation the right name? I know we use it in some places, but more in the sense of rotation than arrangement.
Possible alternatives: arrangement, direction, layout, ...
Sorry, something went wrong.
All reactions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We use orientation for direction of grouped things in boxplot (and internally in bars)
https://matplotlib.org/devdocs/users/next_whats_new/boxplot_orientation.html
Sorry, something went wrong.
All reactions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Boxplot is a counter example. There (as well as bar) it's associated with the rotation of the box = direction of the whiskers. "Vertical" means the distribution is along the y axis and multiple boxes are arranged side-by-side horizontally.
In contrast, here "vertical" would mean multiple radio buttons are arranged stacked vertically.
Sorry, something went wrong.
All reactions
-
👍 1 reaction
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I'd say "pack_direction" or "layout_direction". This isn't going to be a heavily used kwarg, so we can be verbose.
Sorry, something went wrong.
All reactions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"layout_direction" sounds good.
Sorry, something went wrong.
All reactions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With respect to #27946 (comment), is that something we want to use orientation
for (giving that this change would be moving toward layout_direction
)?
Sorry, something went wrong.
All reactions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you mean text above or to the side of the button? I would not make this configurable but always put the text to the side. This is marginally more work, but the standard look and feel of radio buttons. If we want to add the horizontal layout, IMHO we have to do it properly.
Sorry, something went wrong.
All reactions
A new optional keyword argument 'layout_direction' is introduced to control it. The new parameter defaults to 'vertical' for backwards compatibility.
f76df0a
to
b82537a
Compare
Are you guys still working on this? Its been 5 years for what seems like a trivial (but very useful) feature |
All reactions
Sorry, something went wrong.
I'm using this patch locally and it has been working fine for me for a while now. |
All reactions
Sorry, something went wrong.
Yeah, sorry: I originated this and then overlooked to complete it. Anything I should do now? Thanks!
Ciao,
Martino
--
Due to my own family/work balance, you may receive emails from me outside of normal working hours. I do not expect a response from you outside of your own working pattern, nor do I expect an immediate response when you are working.
From: Doron Behar ***@***.***>
Reply to: matplotlib/matplotlib ***@***.***>
Date: Wednesday, 12. March 2025 at 08:56
To: matplotlib/matplotlib ***@***.***>
Cc: Martino Romaniello ***@***.***>, Mention ***@***.***>
Subject: Re: [matplotlib/matplotlib] Horizontal radio buttons (#13374)
This email was sent from outside of ESO from the address ***@***.***. If it looks suspicious, please report it to ***@***.***
I'm using this patch locally and it has been working fine for me for a while now.
—
Reply to this email directly, view it on GitHub<#13374 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AE5K2YYOOHOR4BRYUT6QMVD2T7R7RAVCNFSM6AAAAABY2HAI2KVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDOMJWHE3DCNBXGI>.
You are receiving this because you were mentioned.Message ID: ***@***.***>
[Image removed by sender. doronbehar]doronbehar left a comment (matplotlib/matplotlib#13374)<#13374 (comment)>
I'm using this patch locally and it has been working fine for me for a while now.
—
Reply to this email directly, view it on GitHub<#13374 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AE5K2YYOOHOR4BRYUT6QMVD2T7R7RAVCNFSM6AAAAABY2HAI2KVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDOMJWHE3DCNBXGI>.
You are receiving this because you were mentioned.Message ID: ***@***.***>
|
All reactions
Sorry, something went wrong.
@@ -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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
to bottom, 'horizontal' places buttons from left to right. | |
to bottom, 'horizontal' places buttons from left to right, distributing | |
the buttons across the whole Axes. The Axes is divided into equal-sized | |
boxes, and each button is left-aligned in the box. There is currently no | |
size check with the associated labels, so that long labels may overlap | |
with the next box. |
Sorry, something went wrong.
All reactions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, I did not check what this actually does:
I strongly think we should follow standard conventions that labels are right of the button not above, because I consider the unusual layout a UX issue. See also #27946 (comment).
Sorry, something went wrong.
All reactions
The orientation of the buttons: 'vertical' places buttons from top | ||
to bottom, 'horizontal' places buttons from left to right. | ||
|
||
.. versionadded:: 3.10 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
.. versionadded:: 3.10 | |
.. versionadded:: 3.11 |
Sorry, something went wrong.
All reactions
NelleV
QuLogic
story645
jklymak
timhoffm
At least 1 approving review is required to merge this pull request.
Successfully merging this pull request may close these issues.
PR Summary
Add the option to have horizontal RadioButtons. A new optional keyword argument 'direction' is introduced to control it. The new parameter defaults to 'vertical' for backwards compatibility.
PR Checklist