Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork7.9k
Description
cbook.is_numlike(obj)
is implemented by checking whetherobj + 1
raises. In particular, this means that numpy numeric arrays are considered as numlikes, which appears to be unintended in most cases.
As an example (not the only one), while
plt.scatter([0], [0], marker=[[0, 0], [0, 1], [1, 1]])
works as expected,
plt.scatter([0], [0], marker=np.array([[0, 0], [0, 1], [1, 1]]))
raises an exception because code inmarkers
checks (effectively, in this case) for whethermarkers
is "numlike", and, if so, considers it to be a number of sides for a polygon marker (at the beginning of_set_tuple_marker
).
In my never-ending push to get rid of as much ofcbook
as possible :-), I would suggest replacing calls tois_numlike
to eithernp.issubdtype(type(obj), np.number)
(if we were using numpy>=1.9.0, this could beisinstance(obj, abc.Number)
) or, if it was actually intended to accept arrays,np.issubtype(np.asarray(obj).dtype, np.number)
-- we may as well distinguish explicitly between the two cases.
Edit: Actually one can just define somewhereNumber = (abc.Number, np.number)
, thenisinstance(obj, Number)
will work even for older numpys (I guess).