获取散点的颜色

时间:2017-12-20 14:38:19

标签: python matplotlib scatter-plot

我有一些带有一些玩具数据的散点图。

我想用点的颜色在给定点旁边绘制一个标签。

玩具示例:

x = 100*np.random.rand(5,1)
y = 100*np.random.rand(5,1)
c = np.random.rand(5,1)

fig, ax = plt.subplots()
sc = plt.scatter(x, y, c=c, cmap='viridis')

# I want to annotate the third point (idx=2)
idx = 2  
ax.annotate("hello", xy=(x[idx],y[idx]), color='green', 
            xytext=(5,5), textcoords="offset points")
plt.show()

enter image description here

我需要以某种方式获取此点的颜色并更改color='green'的{​​{1}}部分

如何在散点图中获得点的颜色?

颜色矢量color=color_of_the_point被转换为颜色图,它还可以进行进一步的修改,例如标准化或alpha值。

sc有一种检索点坐标的方法:

c

因此,获得点颜色的方法也是合乎逻辑的,但我找不到这样的方法。

2 个答案:

答案 0 :(得分:6)

散点图是PathCollection,其子类为ScalarMappableScalarMappable有一个方法to_rgba。这可用于获取与颜色值对应的颜色。

在这种情况下

sc.to_rgba(c[idx])

请注意,问题中使用的数组是2D数组,这通常是不受欢迎的。所以一个完整的例子看起来像

import matplotlib.pyplot as plt
import numpy as np

x = 100*np.random.rand(5)
y = 100*np.random.rand(5)
c = np.random.rand(5)

fig, ax = plt.subplots()
sc = plt.scatter(x, y, c=c, cmap='viridis')

# I want to annotate the third point (idx=2)
idx = 2  
ax.annotate("hello", xy=(x[idx],y[idx]), color=sc.to_rgba(c[idx]), 
            xytext=(5,5), textcoords="offset points")
plt.show()

enter image description here

答案 1 :(得分:0)

散点图是一个PathCollection,如另一个答案所述。它具有get_facecolors()方法,该方法返回用于渲染每个点的颜色。但是,仅在绘制散点图后才返回正确的颜色。因此,我们可以首先触发plt.draw(),然后使用get_facecolors()

工作示例:

import matplotlib.pyplot as plt
import numpy as np

x = 100*np.random.rand(5)
y = 100*np.random.rand(5)
c = np.random.rand(5)

fig, ax = plt.subplots()
sc = ax.scatter(x, y, c=c, cmap='viridis')

idx = 2  
plt.draw()

col = sc.get_facecolors()[idx].tolist()

ax.annotate("hello", xy=(x[idx],y[idx]), color=col, 
            xytext=(5,5), textcoords="offset points")
plt.show()

生成

Example Plot