Description
Bug report
Bug summary
When calling a scatter
with a list for the c
argument, which does not match the length of the data, an AttributeError: 'list' object has no attribute 'shape'
is raised instead of informing the user about the non-matching length issue.
#7363 tried hard to make error message clearer but forgot to consider that input may be any sequence, not necessarily a numpy array.
A similar issue was raised in #9209.
Code for reproduction
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
c = [1,2,3,4,5,6] # one color more than values
plt.scatter(x,x, c=c)
plt.show()
Actual outcome
An error
File "...\lib\site-packages\matplotlib\axes\_axes.py", line 4279, in scatter
.format(c.shape, x.size, y.size))
AttributeError: 'list' object has no attribute 'shape'
This error tells nothing about the true cause of the problem, but is rather an error caused by the error message itself.
Expected outcome
An error similar to the intended one
matplotlib/lib/matplotlib/axes/_axes.py
Lines 3946 to 3950 in 6ec80ea
but for a list, which does not have a shape
attribute.
Note that I rather raised this issue, instead of directly fixing it, because I'm not sure if there should be some typechecking performed within the except
clause or whether to add another try
inside the except
or - because both feels kind of strange - someone has an even better idea.
Matplotlib version
- Operating system: Windows 8.1
- Matplotlib version: 2.2.2
- Matplotlib backend: any
- Python version: 3.6