【问题标题】:matplotlib scatter plot colour as function of third variable [duplicate]matplotlib散点图颜色作为第三个变量的函数[重复]
【发布时间】:2012-10-18 23:05:31
【问题描述】:

我想知道如何通过第三个变量来制作matplotlib的散点函数色点。

问题 gnuplot linecolor variable in matplotlib?Matplotlib scatterplot; colour as a function of a third variable 提出了类似的查询,但是,这些问题的答案并没有解决我的问题:在 scatter 函数中使用 c=arraywhichspecifiespointcolour 只会设置填充颜色,而不是边缘颜色。这意味着使用markersymbol='+'c=arr... 的使用会失败,例如(因为该标记没有填充,只有边缘)。无论使用哪个符号,我都希望点由第三个变量可靠地着色。

有没有办法通过 Matplotlib 的 scatter 函数实现这一点?

【问题讨论】:

  • 当我设置 marker='+' 时,我得到了彩色的 + 符号。
  • @Avaris:也适合我。我相应地更新了我的答案。

标签: python matplotlib scatter


【解决方案1】:

这对我有用,使用 matplotlib 1.1:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y = np.sin(x)

plt.scatter(x, y, marker='+', s=150, linewidths=4, c=y, cmap=plt.cm.coolwarm)
plt.show()

结果:

或者,对于 n 个点,创建一个形状为 (n, 3) 的 RGB 颜色值数组,并将其分配给 scatter()edgecolors 关键字参数:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 20, 100)
y = np.sin(x)
z = x + 20 * y

scaled_z = (z - z.min()) / z.ptp()
colors = plt.cm.coolwarm(scaled_z)

plt.scatter(x, y, marker='+', edgecolors=colors, s=150, linewidths=4)
plt.show()

结果:

该示例通过将z 值缩放到[0,1] 范围并使用缩放值调用颜色图plt.cm.coolwarm 来获取RGBA 值。当以这种方式调用时,matplotlib 颜色图返回一个 RGBA 值数组,每一行给出相应输入值的颜色。例如:

>>> t = np.linspace(0, 1, 5)
>>> t
array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ])
>>> plt.cm.coolwarm(t) 
array([[ 0.2298,  0.2987,  0.7537,  1.    ],
       [ 0.5543,  0.6901,  0.9955,  1.    ],
       [ 0.8674,  0.8644,  0.8626,  1.    ],
       [ 0.9567,  0.598 ,  0.4773,  1.    ],
       [ 0.7057,  0.0156,  0.1502,  1.    ]])

【讨论】:

  • 感谢沃伦的回答。不幸的是,你的第一个例子对我来说是黑色的。我不知道为什么。 mpl.__version__ 给出 1.0.1,如果这是相关的。我可能不得不尝试将 'edgecolors' 传递给 rgbs 列表,但这意味着我必须手动从 'z' 值和颜色图创建它们,对吗?
  • 我使用的是 1.1 版。标记代码在 1.0 和 1.1 之间有一些更改,所以这可能是个问题。我更新了第二个示例以显示将“z”值映射到颜色的一种方式(但我没有在 matplotlib 1.0 中尝试过)。
  • 嗨,沃伦。为了跟进这一点,当我使用更新的 (1.1) 版本的 matplotlib 时,我确实得到了具有完全相同代码的彩色点。问题被认为已解决。谢谢!
  • 如果您使用Python 2.7,请记住使用:from __future__ import divisioncolors 数组将全为零(由于向下舍入)
猜你喜欢
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 2017-01-29
  • 2020-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多