Scatter plot colorbar - Matplotlib

发布于 2021-01-29 14:55:21

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.

关注者
0
被浏览
156
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    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 into plt.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).



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看