Tom Hale
Tom Hale

Reputation: 46745

matplotlib scatter: TypeError: unhashable type: 'numpy.ndarray'

I'm getting the following error:

TypeError                                 Traceback (most recent call last)
~/.local/share/miniconda3/lib/python3.6/site-packages/matplotlib/colors.py in to_rgba(c, alpha)
    154     try:
--> 155         rgba = _colors_full_map.cache[c, alpha]
    156     except (KeyError, TypeError):  # Not in cache, or unhashable.

TypeError: unhashable type: 'numpy.ndarray'

The code in question is from a .ipynb downloaded from Coursera.

It works fine on their system, but it seems that I have a library versioning problem locally.

The code is:

plt.scatter(X[0, :], X[1, :], c=y, cmap=plt.cm.Spectral)

Upvotes: 6

Views: 9514

Answers (1)

Tom Hale
Tom Hale

Reputation: 46745

Change:

plt.scatter(X[0, :], X[1, :], c=y, cmap=plt.cm.Spectral)

to:

plt.scatter(X[0, :], X[1, :], c=y.ravel().tolist(), cmap=plt.cm.Spectral)

This flattens the array y to be one-dimensional, and then turns it into a list, which to_rgba is happy to digest as something it can hash.


Coursera Deep Learning students:

You'll likely find the offending line(s) of code in one of the *util*.py files. Look for scatter in the traceback to get the filename.

I saw this question raised about 8 times on the forum. Please upvote both question and answer if they've been useful.

Upvotes: 16

Related Questions