Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork7.9k
Fix setting artists properties of selectors#20693
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Fix setting artists properties of selectors#20693
Uh oh!
There was an error while loading.Please reload this page.
Conversation
@larsoner, does this API look good to you? |
Yep, and I tested it and it seems to work for us! |
Great, thanks@larsoner! |
d73f751
to6a93943
CompareThis is ready for review |
I don't think this is a good idea. Having Should we keep them internal (and have public
That depends: How much control do we want to give to the user? |
190c96c
to9e6394f
Compare
Agreed, I have added a
I would lean toward keeping it simple for now! |
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
lib/matplotlib/widgets.py Outdated
self._direction = direction | ||
self.new_axes(self.ax) | ||
if self._interactive: | ||
self._setup_edge_handle(self._edge_handles._line_props) | ||
line = self._edge_handles.artists[0] | ||
line_props = dict(alpha=line.get_alpha(), |
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 there a way to get the properties relevant toaxvline
(the kwargs ofaxvline
)?line.properties()
returns too many properties.
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.
Not directly.https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.axvline.html#matplotlib.axes.Axes.axvline says
Valid keyword arguments are Line2D properties, with the exception of 'transform'.
That's because it's aLine2D
, but we enforce the vertical placement using a transform, so this is not user-settable.
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.
Yes, indeed, but there are also other properties (internal properties?), which are not listed inhttps://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.axvline.html#matplotlib.axes.Axes.axvline:
importmatplotlib.pyplotaspltfig,ax=plt.subplots()line=ax.axvline(1.5)props=line.properties()delprops['transform']line.set(**props)
Will give the following error:
File"/home/eric/Dev/others/matplotlib/lib/matplotlib/artist.py",line115,in<lambda>cls.set=lambdaself,**kwargs:Artist.set(self,**kwargs)File"/home/eric/Dev/others/matplotlib/lib/matplotlib/artist.py",line1155,insetreturnself.update(kwargs)File"/home/eric/Dev/others/matplotlib/lib/matplotlib/artist.py",line1060,inupdateraiseAttributeError(f"{type(self).__name__!r} object "AttributeError:'Line2D'objecthasnoproperty'children'
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.
Essentially looks good.
Since for now, we seem to need the update,set_props()
andset_handle_props()
are the right way to go. In that case, do people still need access to the propertiesartists
,selection_artist
,handle_artists
? If not, I'd start with keeping them private to keep the public API small. We can always make them public later if needed.
lib/matplotlib/widgets.py Outdated
self._direction = direction | ||
self.new_axes(self.ax) | ||
if self._interactive: | ||
self._setup_edge_handle(self._edge_handles._line_props) | ||
line = self._edge_handles.artists[0] | ||
line_props = dict(alpha=line.get_alpha(), |
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.
Not directly.https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.axvline.html#matplotlib.axes.Axes.axvline says
Valid keyword arguments are Line2D properties, with the exception of 'transform'.
That's because it's aLine2D
, but we enforce the vertical placement using a transform, so this is not user-settable.
b0545dc
to73ac533
CompareThis is ready for review, I have updated thedescription of the PR to reflect the current state. |
Uh oh!
There was an error while loading.Please reload this page.
8f0e823
toa871ca6
CompareUh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Co-authored-by: Elliott Sales de Andrade <quantum.analyst@gmail.com>
382bc1d
tocee023e
CompareThanks@QuLogic for the review, all comments should be sorted! |
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Co-authored-by: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com>
Thanks@timhoffm, all done - CI had some hiccups and I restarted it. |
Thanks@ericpre! |
…693-on-v3.5.xBackport PR#20693 on branch v3.5.x (Fix setting artists properties of selectors)
Uh oh!
There was an error while loading.Please reload this page.
PR Summary
Fix#20618 by adding
set_props
andset_handle_props
method.This PR needs a bit of tidying up but I would like to know if we are happy with this approach!A few others changes:
selector.artists
is now a property returning a tuple of all artists to disallow changing the artists through a public API_selection_artist
and_handles_artists
to access the corresponding artists internally.Remove the use ofSpanSelector._rect
and other, because it is already accessible throughartists[0]
, maybe this is still better to keep a separate attribute?Alternative could be:
props
andhandle_props
setterget_main_artist
get_handle_artists
, which could use asspan.get_main_artist().set(facecolor='green')
, forget_handle_artists
, it would be necessary to loop over the tuplePR Checklist
pytest
passes).flake8
on changed files to check).flake8-docstrings
and runflake8 --docstring-convention=all
).doc/users/next_whats_new/
(follow instructions in README.rst there).doc/api/next_api_changes/
(follow instructions in README.rst there).