Scatter plot colorbar - Matplotlib
I’m trying to show a color bar of my scatter plot but I’m keep getting the
error:
TypeError: You must first set_array for mappable
This is what I’m doing to plot:
# Just plotting the values of data that are nonzero
x_data = numpy.nonzero(data)[0] # x coordinates
y_data = numpy.nonzero(data)[1] # y coordinates
# Mapping the values to RGBA colors
data = plt.cm.jet(data[x_data, y_data])
pts = plt.scatter(x_data, y_data, marker='s', color=data)
plt.colorbar(pts)
If I comment the line plt.colorbar(pts)
I got the plot correctly, but I
would like to plot the color bar too.
Thank you in advance.
-
You’re passing in specific rgb values, so matplotlib can’t construct a
colormap, because it doesn’t know how it relates to your original data.Instead of mapping the values to RGB colors, let
scatter
handle that for
you.Instead of:
# Mapping the values to RGBA colors data = plt.cm.jet(data[x_data, y_data]) pts = plt.scatter(x_data, y_data, marker='s', color=data)
Do:
pts = plt.scatter(x_data, y_data, marker='s', c=data[x_data, y_data])
(Just pass in to
c
what you were originally passing intoplt.cm.jet
.)Then you’ll be able to construct a colormap normally. The specific error is
telling you that the colors have been manually set, rather than set through
set_array
(which handles mapping an array of data values to RGB).