散点图颜色条 - 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。 (: 不,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 对!很高兴你明白了!

以上是关于散点图颜色条 - Matplotlib的主要内容,如果未能解决你的问题,请参考以下文章

如何将固定颜色条添加到 3D 散点动画图并相应地对点进行颜色映射?

Excel 添加散点图并添加趋势线

如何用matlab 画散点图 如何标记数据点的颜色

用matplotlib画散点图

Matplotlib 散点图图例

echarts散点图怎么改涟漪纹的颜色