散点图颜色条 - Matplotlib
Posted
技术标签:
【中文标题】散点图颜色条 - Matplotlib【英文标题】:Scatter plot colorbar - 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)
行,我得到了正确的绘图,但我也想绘制颜色条。
提前谢谢你。
【问题讨论】:
【参考方案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。 (: 不,color
是 facecolors
的别名。 (这有点令人困惑,但这是由于继承了 matlab 的绘图 api。)c
是原始 matlab 分散的结转。 scatter
旨在被称为 scatter(x, y, c=z1, s=z1)
以同时显示 4 个变量。 (两个位置,因颜色而异,因大小而异)。在幕后,color
调用 set_facecolors
和 c
调用输出集合上的 set_array
。从长远来看,如果传入一个标量数组,让color
的行为与c
相同可能是个好主意。
嗯,明白了。 (:但是,即使我传递了参数 cmap=plt.cm.jet,我的颜色也与其他图有很大不同(并且我得到了带有白色轮廓的正方形)。
@pceccon - 是的!这是因为在您的原始示例中,数据范围在 0 和 1 之间缩放,而在我的示例中,它在数据的最小值和最大值之间缩放。要使其与原始版本相同,请使用cmin=0, cmax=1
。
对!很高兴你明白了!以上是关于散点图颜色条 - Matplotlib的主要内容,如果未能解决你的问题,请参考以下文章