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

3

有没有一种方法可以从matplotlib散点图的x,y坐标获取颜色(或简单的是/否答案,如果颜色存在)?

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

任何帮助将不胜感激。

2个回答

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)实际上在两个圆内,因此打印了两种颜色,而第二个点不在任何圆内,打印了一个空数组。


非常感谢。这正是我所需要的。 - Ilze

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

我怀疑这不是问题所要表达的意思。 - ImportanceOfBeingErnest
好的,如果那是情况的话,我会将其删除。 - Beatdown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接