Matplotlib 散点图颜色



我正在尝试使用网格输入数据在散点图上设置颜色。我使用的代码如下:

xmesh = np.linspace(-5, 5, 30)
ymesh = np.linspace(-5, 5, 30)
xv, yv = np.meshgrid(xmesh, ymesh)
zv = a*xv+b*yv+c #a,b,c are some scalar constants
col = np.where(zv<0.5,'b','r')
plt.scatter(xv,yv,c=col)
plt.show()

执行此代码将返回以下错误:

could not convert string to float: 'b'

而如果我将颜色图设置为浮点值:

col = np.where(zv<0.5,0.1,0.2) 

这没有任何问题。知道为什么吗?

在查看抛出错误的代码部分时,我看到以下备注:

# tuple color.
# Python 2.7 / numpy 1.6 apparently require this to return builtin floats,
# not numpy floats.
try:
c = tuple(map(float, c))

也许那里有一些东西需要理解以找到解决方案,但我无法得到它

来自scatter文档

但是,c可以是 2-D 数组,其中的行是 RGB 或 RGBA,包括单行的情况,以便为所有点指定相同的颜色。

因此,提供给c的数组必须是 RGB 或 RGBA 值的一维数组或二维数组。它不能是任意的 2D 数组。

因此,您需要扁平化阵列,

col = np.where(zv<0.5,'b','r').flatten()
plt.scatter(xv,yv,c=col)