Skip to content

Passing an incorrectly sized colour list to scatter should raise a relevant error #11373

Closed
@ImportanceOfBeingErnest

Description

@ImportanceOfBeingErnest

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

except ValueError:
# c not acceptable as PathCollection facecolor
raise ValueError("c of shape {} not acceptable as a color "
"sequence for x with size {}, y with size {}"
.format(c.shape, x.size, y.size))

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions