【问题标题】:Matplotlib scatter plot colorsMatplotlib 散点图颜色
【发布时间】:2017-11-11 19:28:59
【问题描述】:

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

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

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

【问题讨论】:

  • 您需要展平颜色数组 (col = np.where(zv&lt;0.5,'b','r').flatten()))。然后上面的代码产生了like this。为了找出代码不适合您的原因,您需要向minimal reproducible example 提供重现所需的所有信息,例如软件版本等。
  • 感谢您的回答。但是为什么我需要对颜色输入进行展平呢?从文档中,我了解 c 可以作为二维数组提供?

标签: python matplotlib


【解决方案1】:

来自scatter documentation

c 可以是一个二维数组,其中行是 RGB 或 RGBA,但是,包括为所有点指定相同颜色的单行的情况。

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

因此你需要展平你的数组,

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

【讨论】:

    猜你喜欢
    • 2014-09-10
    • 2011-08-29
    • 2015-04-19
    • 2021-04-15
    • 2011-07-26
    • 2021-07-28
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多