-
-
Notifications
You must be signed in to change notification settings - Fork 7.9k
Allow passing a transformation to secondary_xaxis/_yaxis #25224
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
Allow passing a transformation to secondary_xaxis/_yaxis #25224
Conversation
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.
Thank you for opening your first PR into Matplotlib!
If you have not heard from us in a while, please feel free to ping @matplotlib/developers
or anyone who has commented on the PR. Most of our reviewers are volunteers and sometimes things fall through the cracks.
You can also join us on gitter for real-time discussion.
For details on testing, writing docs, and our review process, please see the developer guide
We strive to be a welcoming and open project. Please follow our Code of Conduct.
This looks really useful, and a quick glance the code is great. Can we add an example, at least in the issue that shows the usefulness of this? Probably want one in the example gallery as well. I had to read your code to understand the context here, which if I understand is to allow the secondary xaxis to have a y position specified in data co-ordinates rather than just axes co-ordinates. If that is the case, what happens if the y data limits are set so the secondary axis is out of the Axes viewport? |
@jklymak Yes, you are correct on the context. Right now, if an axis is out of the viewport it isn't drawn. The existing function behaves the same if you give it a location outside of the viewport. E.g. Good point on the examples, I'll take care of that. |
Hi @ZachDaChampion - it seems you also need a rebase here to incorporate changes made in the main branch. Here's a handy guide: https://matplotlib.org/stable/devel/development_workflow.html#rebasing-on-upstream-main Feel free to ping if you need more guidance! |
It appears that you did a merge instead of a rebase, which results in 884 commits (!!) showing up here. We have some docs for recovering from situations like this: https://matplotlib.org/stable/devel/development_workflow.html#recovering-from-mess-ups |
My bad, I didn't realize I pushed that version. Thanks for the link |
ffb9b8e
to
cb55d34
Compare
Now that we have typing stubs, it looks like you'll have to update the corresponding lines in the |
4af5bc1
to
e33828f
Compare
b2d2bc7
to
941f455
Compare
Gentle ping to the reviewers - can you take another look here? Thanks! |
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.
Just a couple minor fixes.
I can rebase later if needed |
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 we took a while to get back to this again. Just a couple minor fixes, but otherwise LGTM.
|
||
fig, ax = plt.subplots(layout='constrained') | ||
x = np.arange(0, 10) | ||
np.random.seed(34) |
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 almost always use 19680801 as seed
np.random.seed(34) | |
np.random.seed(19680801) |
lib/matplotlib/axes/_axes.py
Outdated
else: | ||
raise ValueError('secondary_yaxis location must be either ' | ||
if not (location in ['left', 'right'] or isinstance(location, Real)): | ||
raise ValueError('secondary_xaxis location must be either ' |
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.
Typo:
raise ValueError('secondary_xaxis location must be either ' | |
raise ValueError('secondary_yaxis location must be either ' |
# Make sure transform is a Transform or None. | ||
_api.check_isinstance((transforms.Transform, None), transform=transform) |
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.
I wouldn't bother with the comment; the function call is clear:
# Make sure transform is a Transform or None. | |
_api.check_isinstance((transforms.Transform, None), transform=transform) | |
_api.check_isinstance((transforms.Transform, None), transform=transform) |
Add transform argument to secondary axes Update _secax_docstring Move new params to end of functions Add input check to secondary axes Add tests Add examples Move transform type checks and improve docs Add type stubs Update _secax_docstring Move new params to end of functions Add input check to secondary axes Move transform type checks and improve docs Fix rebase error Fix stub for SecondaryAxis.__init__ Clarify example Add default param to secax constructor Fix stub for secax constructor Simplify imports Co-authored-by: Elliott Sales de Andrade <quantum.analyst@gmail.com> Remove redundancy in docs Co-authored-by: Elliott Sales de Andrade <quantum.analyst@gmail.com> Fix typo
4905246
to
c1b51aa
Compare
I've rebased, squashed into one commit, fixed the typos, and force pushed here in the interest of getting this merged. |
Thanks @ZachDaChampion and congratulations on your first contribution to Matplotlib. 🎉 We'd love to see you back! |
PR Summary
resolves #25119.
I'm new to Matplotlib development so not sure if this is the best way to do this. I added a
transform
parameter tosecondary_xaxis
andsecondary_yaxis
and passed that through intoSecondaryAxis._set_location()
, where the transform is blended.I also updated
test_secondary_xy()
andtest_secondary_fail()
to test the transform.I'm not entirely sure if/where I'm meant to put
.. versionchanged::
in the docsting, but I'm happy to add it if it's needed.PR Checklist
Documentation and Tests
pytest
passes)Release Notes
.. versionadded::
directive in the docstring and documented indoc/users/next_whats_new/
.. versionchanged::
directive in the docstring and documented indoc/api/next_api_changes/
next_whats_new/README.rst
ornext_api_changes/README.rst