【问题标题】:Scatter plot colorbar - Matplotlib散点图颜色条 - Matplotlib
【发布时间】:2014-09-10 01:40:28
【问题描述】:

我正在尝试显示我的散点图的颜色条,但我不断收到错误消息:

TypeError: You must first set_array for mappable

这就是我正在做的情节:

# 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)

如果我评论 plt.colorbar(pts) 行,我得到了正确的绘图,但我也想绘制颜色条。

提前谢谢你。

【问题讨论】:

    标签: python matplotlib plot colorbar


    【解决方案1】:

    您正在传递特定的 rgb 值,因此 matplotlib 无法构建颜色图,因为它不知道它与您的原始数据的关系。

    不要将值映射到 RGB 颜色,而是让 scatter 为您处理。

    代替:

    # 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)
    

    做:

    pts = plt.scatter(x_data, y_data, marker='s', c=data[x_data, y_data])
    

    (只需将您最初传递给plt.cm.jet的内容传递给c。)

    然后您就可以正常构建颜色图了。具体的错误是告诉您颜色是手动设置的,而不是通过set_array(处理将数据值数组映射到RGB)设置的。

    【讨论】:

    • 成功了。我只有最后一个问题。我已经使用 color=data[x_data, y_data] 进行了尝试,但我得到了相同的错误消息。那么,c != 颜色?谢谢你,@JoeKington。 (:
    • 不,colorfacecolors 的别名。 (这有点令人困惑,但这是由于继承了 matlab 的绘图 api。)c 是原始 matlab 分散的结转。 scatter 旨在被称为 scatter(x, y, c=z1, s=z1) 以同时显示 4 个变量。 (两个位置,因颜色而异,因大小而异)。在幕后,color 调用 set_facecolorsc 调用输出集合上的 set_array。从长远来看,如果传入一个标量数组,让color 的行为与c 相同可能是个好主意。
    • 嗯,明白了。 (:但是,即使我传递了参数 cmap=plt.cm.jet,我的颜色也与其他图有很大不同(并且我得到了带有白色轮廓的正方形)。
    • @pceccon - 是的!这是因为在您的原始示例中,数据范围在 0 和 1 之间缩放,而在我的示例中,它在数据的最小值和最大值之间缩放。要使其与原始版本相同,请使用cmin=0, cmax=1
    • 对!很高兴你明白了!
    猜你喜欢
    • 2011-08-29
    • 1970-01-01
    • 2011-07-26
    • 2021-07-28
    • 2013-06-16
    • 1970-01-01
    • 2015-04-19
    • 2021-04-15
    相关资源
    最近更新 更多