是否有办法从matplotlib散点图的x,y坐标获取颜色(或者如果存在颜色,则为简单的是/否答案)?
基本上我想给出一个坐标(x,y),并知道我的情节中该位置是否有彩色圆圈。
任何帮助将不胜感激。
答案 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