有没有一种方法可以从matplotlib散点图的x,y坐标获取颜色(或简单的是/否答案,如果颜色存在)?
基本上,我想给出一个坐标(x,y),并知道在该位置是否有彩色圆圈。
任何帮助将不胜感激。
有没有一种方法可以从matplotlib散点图的x,y坐标获取颜色(或简单的是/否答案,如果颜色存在)?
基本上,我想给出一个坐标(x,y),并知道在该位置是否有彩色圆圈。
任何帮助将不胜感激。
(xi,yi)
是否存在散点圆并不直接。问题在于 (xi,yi)
是以数据坐标给出的,而圆是以显示坐标作为圆形绘制的。这意味着当 x 轴和 y 轴的轴比例不同时,在数据坐标中,圆实际上可能是一个椭圆。(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)
实际上在两个圆内,因此打印了两种颜色,而第二个点不在任何圆内,打印了一个空数组。
你可以使用 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