-
-
Notifications
You must be signed in to change notification settings - Fork 7.9k
Fix singleton hist labels #12572
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
Fix singleton hist labels #12572
Conversation
61d3a37
to
819b99d
Compare
lib/matplotlib/axes/_axes.py
Outdated
else: | ||
if isinstance(label, str): |
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.
Rather keep it on one level:
if label is None:
labels = [None]
elif isinstance(label, str):
labels = [label]
elif not np.iterable(label):
labels = [str(label)]
else:
labels = [str(lab) for lab in label]
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.
Sure - I was hoping it'd have been even simpler, but str(None)
returns "None"
, which ruined my plans.
819b99d
to
f38b1c9
Compare
@@ -6758,6 +6758,8 @@ def hist(self, x, bins=None, range=None, density=None, weights=None, | |||
labels = [None] | |||
elif isinstance(label, str): | |||
labels = [label] | |||
elif not np.iterable(label): | |||
labels = [str(label)] |
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 think you can combine this case with the one above it
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.
Unfortunately strings are iterable, so I don't think I can...
In [1]: boo = 'who'
In [2]: import numpy as np
In [3]: np.iterable(boo)
Out[3]: True
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.
This is exactly the code required to make int labels work.
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.
My mistake, I thought np.iterable
ignored strings. np.ndim(boo) == 0
would work, but is perhaps slower.
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.
np.ndim
looks useful. I quite readily get confused with the best way to test if something is a list, ndarray, or singleton, and our codebase uses a few incantations. I would be fine w/ changing this to something that is an agreed-upon standard way to check. This logic only gets called when a hist is added to the axes, so I don't think we need to worry overly much about performance.
PR Summary
Re-closes #3869
PR Checklist