如何在散点图Python中返回点的颜色

时间:2017-04-03 02:51:43

标签: python matplotlib

是否有办法从matplotlib散点图的x,y坐标获取颜色(或者如果存在颜色,则为简单的是/否答案)?

基本上我想给出一个坐标(x,y),并知道我的情节中该位置是否有彩色圆圈。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

确定位置(xi,yi)是否存在分散圆不是直截了当的。问题是(xi,yi)在数据坐标中给出,而圆圈在显示坐标中绘制为圆形。这意味着当x轴和y轴的轴缩放不同时,显示坐标中的圆可能实际上是数据坐标中的椭圆。

Matplotlib包含一些功能,用于确定显示坐标中给定的点是否在艺术家范围内。我要使用它,首先必须绘制画布。然后,可以在位置(xi,yi)处模拟鼠标事件,并检测它是否从分散中击中任何艺术家。然后可以检索相应的颜色。

import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
import matplotlib.backend_bases

x = np.random.rayleigh(size=10)
y = np.random.normal(size=10)
c = np.random.rand(10)

fig, ax = plt.subplots()
sc = ax.scatter(x,y,c=c, s=49, picker=True)

fig.canvas.draw()

def color_at_pos(xi,yi):
    xi, yi = ax.transData.transform((xi,yi))
    me = matplotlib.backend_bases.LocationEvent("no", fig.canvas, xi, yi)
    cont, ind = sc.contains(me)
    return sc.cmap(sc.norm(sc.get_array()[ind["ind"]]))

col = color_at_pos(1.25931,0.145889)
print col
col = color_at_pos(0.7,0.7)
print col

plt.show()

这里第一个点(1.25931,0.145889)在两个圆圈内实现,因此打印出两种颜色,而第二个点不在任何圆圈中,并且打印出一个空数组。

答案 1 :(得分:0)

您可以使用get_color()例如

a = plt.plot(x,c, color="blue", linewidth=2.0, linestyle="-")
b = plt.plot(x,s, color="red", linewidth=2.0, linestyle="-")

print a[0].get_color()
print b[0].get_color()

>>blue
>>red

或者您可以将返回的颜色分配给要使用的变量:

color_a = a[0].get_color()

if color_a == 'blue':
    ..do something